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 № 1Moż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".
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.