2013-02-19 10 views
11

sytuacji, w której pracuję jest z panującymi, więc pokrywa się ze mną ..Reuse istniejących klas z innej usługi Reference

Jesteśmy spożywać zewnętrznych (nie .NET) SOAP webservices.
Z jakiegoś powodu, każda metoda jest realizowany w służbie oddzielny internetowej z jego własne WSDL.
Wiele obiektów zwracanych przez usługi sieciowe ma ten sam wzór, nazwę i przestrzeń nazw xml.

"Dodaj usługi Reference" jest używany, ponieważ:
- wewnętrzny zespół dev służą do niego
- chcielibyśmy zachować automatyczny "Update Service Reference"

2. odniesienie jest dodawany z opcją "Ponowne typy we wszystkich odwołanych złożeniach".
Wszystkie klasy są jednak generowane ponownie pod nowym numerem referencyjnym.

gdzie sposób ponowne z klas z1-ta odniesienia?

+0

Czy chodzi ci o ponowne użycie klas, takich jak klasy danych? Prawdopodobnie nie, ponieważ każdy serwer proxy klienta znajduje się we własnej przestrzeni nazw. Jeśli udostępniasz wspólne obiekty danych, naprawdę musisz albo ręcznie kodować klasę proxy klienta, albo utworzyć własny generator proxy klienta. .NET naprawdę sprawia, że ​​dość łatwo jest robić takie rzeczy. Można nawet wykorzystać coś w stylu T4, aby wygenerować kod. – Pete

+0

Mam na myśli klasy danych i problem w zasięgu idd przestrzeni nazw na proxy. W jaki sposób chciałbym uzyskać własny generator proxy klienta? – David

+0

możliwe duplikaty [svcutil exlude/reuse refrenced assemblies] (http://stackoverflow.com/questions/8786096/svcutil-exlude-reuse-refrenced- zgromadzenia). Czy próbowałeś 'svcutil.exe/r'? – jrummell

Odpowiedz

18

Możesz dodać wiele plików WSDL, jeśli otworzysz plik Reference Reference Reference.svcmap (aby go znaleźć, zaznacz opcję "Show All Files" i rozszerz swój odnośnik do usługi) i edytuj go ręcznie, zamiast ustawiać identyfikator URI WSDL za pośrednictwem interfejsu GUI. Na przykład.

<MetadataSources> 
    <MetadataSource Address="http://localhost/example1.wsdl" Protocol="http" SourceId="1" /> 
    <MetadataSource Address="http://localhost/example2.wsdl" Protocol="http" SourceId="2" /> 
    </MetadataSources> 

Kiedy masz wiele WSDLs w jednej usługi Reference, zajęcia będą ponownie wykorzystane, jak opisać, tak długo jak są one identyczne w różnych WSDLs. Jeśli istnieją klasy o tej samej nazwie, ale inne definicje, jeden z nich będzie miał przyrostek "1" dołączony do nazwy.

+0

Dzięki, dokładnie to, czego potrzebowałem! Klasy o tej samej nazwie, ale o innej definicji są obsługiwane w następujący sposób: ClassName, ClassName1. Czy zdarzy ci się wiedzieć, jak kontrolować sufiks (np. Zamiast "1")? – David

+0

Możesz spróbować napisać swój własny generator proxy klienta. Kiedy znajdziesz klasę kończącą się na "1", zmień ją na preferowany sufiks. Zobacz http://www.primordialcode.com/blog/post/silverlight-wcf-writing-custom-wcf-proxy-generator-support-validation na początek. –

+0

Mam tylko 1 WSDl w 1 odwołanie do usługi w svcmap, ale nadal generuje niektóre atrybuty z 1 sufiksu. jaki może być powód? dowolny pomysł? – batmaci