2010-03-02 15 views
17

Çok ayrıntılı SOAP hizmetlerine sahip bir 3. taraf sağlayıcısına dayanan bir uygulama oluşturma (50'den fazla WSDL dosyası konuşuyoruz). Her bir bireysel WSDL, ancak çok sayıda paylaşılan tip bildirimi vardır. Wsdl.exe ile istemci kodu oluştururken, bir tür birkaç kez bulunursa, yinelenen girdileri birleştirecek bir/sharedtypes bayrağı vardı./sharedtypes karşılığı mı?

İstemci kodumu oluşturmaya çalıştığımda, üçüncü tarafın tüm WSDL dosyalarında içerdiği örtüşen bu türlere bomba atıyorum.

Tür çarpışmalarına işaret eden hata iletilerindeki sonuçlar. Örneğin, aşağıdaki hata iletileri birkaç örnekleri:

Error: There was an error verifying some XML Schemas generated during export: 
The simpleType 'http://common.soap.3rdparty.com:CurrencyNotation' has already been 
declared. 

Error: There was an error verifying some XML Schemas generated during export: 
The complexType 'http://common.soap.3rdparty.com:NumberFormat' has already been 
declared. 

Ben WSDLs çıkışında üzerinde kontrole sahip değildir. WSDL dosyalarını düzenlemeye geri dönmenin çok zor olacağı, çalışma zamanında bir moda kırılan bir hatadan korkmak için el ile WSDL'leri düzenlemek zorunda kalmak istemiyorum. 200-1200 satır XML arasında değişen 50 adet WSDL dosyası olduğundan bahsetmemeliyiz. (Biz SABUN bize 90'ların sonlarında tüm geri büyük kurtuluşu olduğunu düşündüm neden tekrar hatırlat?)

cevap

2

tek komutla tüm WSDLs belirtmeyi deneyin:

svcutil http://example.com/service1?wsdl http://example.com/service2?wsdl ... 

Bu, otomatik olarak yinelenen tür bakmak gerekir . Başka bir seçenek /reference komut anahtarı bakmak şudur:

:

/reference:<file path>  - Add the specified assembly to the set of 
           assemblies used for resolving type 
           references. If you are exporting or 
           validating a service that uses 3rd-party 
           extensions (Behaviors, Bindings and 
           BindingElements) registered in config use 
           this option to locate extension assemblies 
           that are not in the GAC. (Short Form: /r) 

Bu zaten bazı derlemede tanımlanmış bazı türleri varsa bu düzeneğini içerebilir ve yinelemeleri önlemek için svcutil türlerini hariç anlamına gelir

svcutil /reference:someassembly.dll http://example.com/service?wsdl 
+1

Tüm wsdls yereldir, ancak bu noktanın yanındadır. Sorunum, birkaç .wsdl dosyasından geçemediğim değil. Sorun, kaynağın her bir wsdl dosyasında (veya hepsi olmasa bile) birden fazla veri türü içermesidir. Örneğin, açtığım ilk 6 wsdls’ten göz attığımda, 5’in CurrencyNotation adlı bir tür için ComplexElement girdisi var. Svcutil tüm wsdls ayrıştırmaya çalıştığında, oh hey, currencyNotation zaten var, SO SORRY diyor. BOOM. – bakasan

+0

Yani, her bir wsdl yolunu tek tek yazmanın * .wsdl (tüm wsdls'ler yerel olarak yer alıyor) gitmekten farklı davranacağını söylüyorsunuz. Bu bizim proxy'lerin ilk nesli olduğu için, referans vermek için gerçekten bir meclise sahip değilim. Bir strateji bir wsdl'yi ayrıştırmak, bir dll'ye derlemek, sonra bir diğerine başvurmak mı? Yinelenenleri çözün, sonra durulayın ve geri kalanı için tekrarlayın? – bakasan

+2

Tüm 50+ wsdl dosyalarının yollarını yazmaya pek hazır değildim, ancak sadece iki tanesiyle svcutil foo.wsdl bar.wsdl, aynı kopya türü mesajıyla bombalandı. Yıllar önce wsdl.exe w/pains dağıtıldıktan sonra, svcutil.exe bu gün ve yaş çok daha iyi görünmüyor görmek çok rahatlatıcı değil. : P – bakasan

0

Benzer sorunlar yaşıyordum. Farklı xml ad alanları için farklı CLR ad alanlarını tanımlayarak (svcutil'in/namespace argümanını kullanarak) çalışmayı başarabildim. I, farklı uç noktalar aynı veri aktarım nesneleri tanımlamak bir sabun webservices çalışmak için bu tur için wsdl.exe kullanıyoruz

/namespace:http://www.opengis.net/gml,OpenGIS.GML 
0

. Ben wsdl.exe kullanın çünkü sharetypes anahtarı vardır. Ben bir WPF geliştiricisi değilim, bu yüzden çıktıyı WPF için ne yaparsa yapmam umurumda değil, ama üretilen sınıfların hepsi kısmi olduğundan, önem verdiğiniz arayüzleri ayrı bir dosyada uygulamak için biraz iş yapabilirsiniz.

İlgili konular