/ / Powielanie definicji klasy w klasach proxy WCF klienta .NET dla usługi WWW Java - .net, wcf, web-services, wsdl

Definiowanie definicji klasy w klasach proxy klienta WCF .NET dla usługi WWW Java - .net, wcf, web-services, wsdl

Pracuję nad.Klient WCF programu NET dla usługi WWW Java. Mogę pomyślnie wygenerować klasy proxy .NET z pliku WSDL usługi WWW Java i wywołać usługę za pośrednictwem klasy proxy. Jednym z problemów jest powielanie klas w klasach proxy. Załóżmy, że mamy dwie usługi WWW Java: java_a i java_b, oba odnoszą się do klasy common_class.

Teraz, jeśli wygeneruję dwie klasy proxy .NET dla dwóch usług WWW Java na kliencie, powiedz: proxy_a i proxy_b. Teraz w obu klasach proxy istnieje klasa zwana common_class, Jeden jest proxy_a.common_class a inny jest proxy_b.common_class. Chcę napisać klasę pomocniczą dla tych dwóchklasy proxy po stronie klienta, ale trudno jest poradzić sobie z common_class.Musię napisać wiele kodu duplikacji, aby manipulować dwie common_class, które nie powinny się w mojej opinii.Możliwe powinno być możliwe ręczne modyfikowanie klas proxy, aby wyodrębnić common_class ale ponieważ będę musiał aktualizować klasy proxy bardzo często będzie to bardzo bolesne wykonywanie pracy ręcznej.

Moje pytanie brzmi: jak uniknąć duplikowania definicji klasy podczas generowania klas proxy?

Z poważaniem, - Bruce

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz edytować fizycznie jedną klasę i nie dodawać jejjako plik porządkowy do projektu, ale jako odniesienie do pliku, w obu projektach. niestety, musisz usunąć deklarację przestrzeni nazw z tego pliku, tak że 2 proxy, które nie mogą ze sobą współpracować.


0 dla odpowiedzi nr 2

Możesz rozwiązać ten problem, ręcznie edytując plik .SvcMap.

Utwórz klasy proxy dla pierwszej usługi WWW (proxy_a).

Następnie przejdź do Eksploratora rozwiązań i upewnij się, że zaznaczona jest opcja "Pokaż wszystkie pliki".

wprowadź opis obrazu tutaj

Teraz otwórz plik Reference.svcmap i wyszukaj węzeł MetadataSources.

Na przykład:

<MetadataSources>
<MetadataSource Address="http://www.example.com/proxy_a/mex"
Protocol="mex" SourceId="1" />
</MetadataSources>

Po prostu dodaj adres URL drugiej usługi (proxy_b) do tego węzła. Nie zapomnij podkręcić atrybutu SourceId.

<MetadataSources>
<MetadataSource Address="http://www.example.com/proxy_a/mex"
Protocol="mex" SourceId="1" />
<MetadataSource Address="http://www.example.com/proxy_b/mex"
Protocol="mex" SourceId="2" />
</MetadataSources>

Kliknij referencję usługi prawym przyciskiem myszy i wybierz"Aktualizuj odniesienie do usługi", aby zregenerować kod po stronie klienta. Teraz, jeśli firma, która zbudowała usługi prawidłowo i przypisane przestrzenie nazw w razie potrzeby, zostanie utworzony tylko jeden typ dla wspólnej klasy, którą udostępniają.

Potrzebujesz więcej informacji? Napisałem o tym numerze artykułu miesiąc temu:

http://cgeers.com/2011/07/31/wcf-sharing-types-using-svcmap/

Mam nadzieję, że to pomoże.