WSDL nasıl kullanılır


126

Bir Web Hizmeti tüketmem gerekiyor. Bana WSDL dosyasını gönderdiler. Web siteme eklemek ve proxy olarak kullanmaya başlamak için ne yapmalıyım? (Sanal Dizine koyarsam keşfedilebilir, ancak bana gerçek web hizmeti ile bağlantı sağlar mı?)


9
Olumlu oy verdim çünkü buradaki diğer kullanıcıların bir cevabını görmekten fayda sağlayacağını düşündüğüm bir soru. Tam olarak bu sorunu arıyordum ve burada bulduğum için mutluyum.
schizoid04

Yanıtlar:


138

Visual Studio'yu çalıştırırdım, bir web projesi (veya konsol uygulaması - önemli değil) oluştururdum.

.Net Standardı için:

  1. Projeye sağ tıklayıp Bağlam ekle menüsünden "Hizmet Referansı Ekle" yi seçerdim.
  2. Gelişmiş'e ve ardından Servis Referansı Ekle'ye tıklardım.
  3. Wsdl'nin tam dosya yolunu alır ve adres çubuğuna yapıştırırdım. Ardından Oku ateşleyin (devam düğmesi).
  4. Dosyayı yüklemeye çalışırken bir hata varsa, aşağıda gösterildiği gibi dosyanın çözmesi gereken bozuk ve çözülmemiş bir url olmalıdır: görüntü açıklamasını buraya girin Nasıl düzeltileceğiyle ilgili bilgi için bu yanıta bakın: Stackoverflow yanıt: için hizmet referansı oluşturulamıyor wsdl dosyası

Hata yoksa, hizmete erişmek için kullanmak istediğiniz NameSpace'i ayarlamanız yeterlidir ve sizin için oluşturulacaktır.

.Net Core için

  1. Projeye sağ tıklayıp Bağlam ekle menüsünden Bağlı Hizmeti seçerdim.
  2. Listeden Microsoft WCF Web Servis Referans Sağlayıcısını seçerdim.
  3. Gözat'a basıp wsdl dosyasını hemen seçerdim, ad alanını ayarlayın ve gitmeye hazırım. Herhangi bir hatayla karşılaşırsanız yukarıdaki hata düzeltme url'sine bakın.

Yukarıdaki yöntemlerden herhangi biri, kullanmanız için basit, çok basit bir WCF istemcisi oluşturacaktır. Oluşturulan kodda bir "YourservicenameClient" sınıfı bulmalısınız.

Referans amaçlı olarak, oluşturulan cs dosyası Obj / debug (veya release) / XsdGeneratedCode içinde bulunabilir ve dll'leri TempPE klasöründe hala bulabilirsiniz.

Oluşturulan Hizmet (ler), WSDL sözleşmesinde tanımlanan yöntemlerin her biri için yöntemlere sahip olmalıdır.

İstemciyi somutlaştırın ve aramak istediğiniz yöntemleri çağırın - hepsi bu!

YourServiceClient client = new YourServiceClient();
client.SayHello("World!");

Uzak URL'yi belirtmeniz gerekiyorsa (varsayılan olarak oluşturulmuş olanı kullanmadan), bunu proxy istemcisinin yapıcısında kolayca yapabilirsiniz:

YourServiceClient client = new YourServiceClient("configName", "remoteURL");

burada configNamekullanılacak uç noktanın adı (URL dışındaki tüm ayarları kullanacaksınız) ve remoteURLbağlanılacak URL'yi temsil eden bir dizedir (yapılandırmada yer alan yerine).


Bu iyi çalışıyor. Makinemde wsdl dosyası varsa ve bu dosyaya referansı eklersem sadece bir soru. URL'yi çalıştırırken, web hizmetini barındıran URL'ye ulaşıyor mu yoksa Binding ve EndPoint'i mi belirtmem gerekiyor?
jmayor

1
Bu size bağlıdır - varsayılan olarak, istemci proxy'si için oluşturulan kod, WSDL'nin içinde bulunan URL'ye sahip olacaktır - başka bir URL'ye gitmeniz gerekiyorsa, bunu kendiniz belirtmeniz gerekir.
marc_s

Bu neden bu kadar kolay? Bir yakalama yok mu? : p Teşekkürler!
Odys

1
Kabul edilen yanıt olarak, web'de barındırılan bir WSDL'nin bir URL'den nasıl kullanılacağından da bahsetmeniz iyi olur.
Caltor

Sanırım bunu çalıştırmaya oldukça yakınım. Hizmet Referansı Ekle aracını kullanarak Web Hizmetini yükledim. İstemciyi örnekleyebiliyorum, ancak yöntemleri çağırmak başarısız olduğum yerdir. Bitiş noktası bir Java uygulaması kullanıyor ve tek görebildiğim XML. Aramaya çalıştığım yöntem, bir müşteri kimliği ve "başka bir şey" arıyor. Bu başka bir şey bir sınıftır. Şaşırtıcı olan. Yardımcı olacaksa bunu aşağıdaki bir gönderiye koyabilirim, ama şaşkınım.
mappingman

45

Görsel stüdyoda.

  • Bir proje oluşturun veya açın.
  • Çözüm gezgininden projeye sağ tıklayın.
  • "Hizmet referansı ekle" yi seçin
  • Adresi aldığınız WSDL ile yapıştırın.
  • Tamam'ı tıklayın.

Hata yoksa, nesne tarayıcısında ve ilgili tüm yöntemlerde hizmet referansını görebilmeniz gerekir.


9
<3 Visual Studio .. Evet, gerçekten bu kadar basit :)
cwap

3
OP'nin bir adresi yok, bir dosyası var.
Henk Holterman

1
Web hizmetinin sağlayıcısı WSDL'yi (belirsizlik yoluyla güvenlik) devre dışı bırakmış olabilir, bu nedenle WSDL'ye erişilebilecek bir URL yoktur ve ardından VS'de bir Web referansı eklemek işe yaramaz. Bununla birlikte, sağlayıcı SİZİN (yani OP) hizmet sözleşmesi hakkında bilmeniz gereken her şeyi bilmenizi istiyor, bu yüzden WSDL dosyasını gönderdiler. Şimdi OP'nin proxy kodunu ondan üretmesi gerekiyor, soru nasıl.
azheglov

3
Dosyanın yolunu yazarak. Bunun işe yaramadığını düşündüren nedir?
John Saunders

1
Merhaba @vidalsasoon. Sınıf gezginimde gördüğüm bu sınıfları nasıl kullanacağımı kısaca açıklayabilir misiniz? ?
CalZone

16

WSDL'den bir Web Hizmeti proxy'si oluşturmak için WSDL.EXE yardımcı programını kullanın .

Şuna benzeyen bir sınıf içeren uzun bir C # kaynak dosyası alacaksınız:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MyService", Namespace="http://myservice.com/myservice")]
public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol {
    ...
}

İstemci tarafınızda, Web hizmetini tüketen kod:

  1. MyService'i somutlaştırın.
  2. URL özelliğini ayarla
  3. Web yöntemlerini çağır

5
Bu, "eski tarz" bir ASMX Web Hizmeti oluşturur - bunlar artık eskimiştir - günümüzde bunun yerine WCF kullanılmalıdır
marc_s

7

.Net Core projesine wsdl referansı eklemek isterseniz "Web referansı ekle" seçeneği yoktur.

Wsdl başvurusunu eklemek için Çözüm Gezgini'ne gidin, Başvurular proje öğesine sağ tıklayın ve ardından Bağlı Hizmet Ekle seçeneğine tıklayın .

görüntü açıklamasını buraya girin

Ardından 'Microsoft WCF Web Hizmeti Başvurusu'nu tıklayın:

görüntü açıklamasını buraya girin

Dosya yolunu URI metin kutusuna girin ve WSDL'yi içe aktarın:

görüntü açıklamasını buraya girin

Basit, çok temel bir WCF istemcisi oluşturacak ve bunu şunun gibi kullanacaksınız:

YourServiceClient client = new YourServiceClient();
client.DoSomething();

Bu uzantı bana görünmüyor.
Rafael Pizao
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.