Próbuję napisać jakiś kod w języku C#, który wywoła usługę WCF w locie, importując plik WSDL, badając go, a następnie dynamicznie wywołując wywołania.Wywołanie usługi WCF bez generowania zespołu
Usługa, którą wywołuję, może się zmieniać od czasu do czasu - więc jeśli tak, chcę, aby mój klient wiedział o nowych metodach i nowych parametrach wejściowych i parametrach wyjściowych do wywołań, bez odbudowywania mojego klienta.
Jednym z możliwych rozwiązań jest zaimportowanie i skompilowanie referencji do usługi w locie.
Opisane tutaj: Creating an assembly on the fly from a WSDL
to do uniknięcia powstawania zespołu i odzwierciedla się to, jeżeli to możliwe.
Sprawdziłem kod dynamicznego proxy w łączu i do zaimportowania wykorzystano klasę szkieletową. Ta klasa to WsdlImporter
. Tak więc pomyślałem sobie świetnie - mogę to wykorzystać i zbadać schemat WSDL i określić, jakie połączenia są obecne oraz jakie wejścia i wyjścia są dostępne.
Problem polega na tym, że w obiektach MessagePartDescription
brakuje informacji o typie, które tworzy WsdlImporter
. Najwyraźniej tego brakuje because it cannot find the types yet - see the response to the question from Brian.
Tak więc jakakolwiek rada, jak powinienem postępować? Czy jestem całkowicie na niewłaściwym torze?
można dać przykład w świecie rzeczywistym, jak byłoby to przydatne? Czy istnieje interfejs Użytkownika przedstawiony użytkownikowi klienta, który pozwala mu wybrać metody wywoływania, być może jakiś harmonogram lub coś takiego? Co jest nie tak z tworzeniem zespołu w locie? To brzmi dość prosto. Czy wyobrażasz sobie coś prostszego niż odbicie? Mam problem z obrazowaniem tego, co by to było. – JohnOpincar
To będzie używane do wywoływania usługi WF. Przepływ pracy może się zmienić - kroki można dodawać/usuwać itd. – Neil
@JohnOpincar - Mój zarzut nie dotyczy refleksji - chodzi o kompilację montażu na bieżąco. Wygląda na to, że jest to podejście, które może powodować problemy z bezpieczeństwem w pewnym momencie i * może * być kruche. Wydaje mi się również dziwne, że gdy wszystkie informacje znajdują się w WSDL i że ostatecznie wszystkie połączenia będą zebrane przez coś, co wygląda jak dynamiczny interfejs API, który buduje dynamiczną warstwę z refleksją nad warstwą statyczną, która został utworzony dynamicznie, a następnie odwzorowany na warstwę dynamiczną, to trochę za dużo. Tworzenie zespołu w locie to mój plan tworzenia kopii zapasowych. – Neil