To pytanie jest związane z Bug in the dynamic language runtime in combination with IIS 7.5ChannelFactory bug z dynamicznym argumentów
ChannelFactory
wisi gdybym dostarczenie jej poprawnie wpisane dynamicznego obiektu.
dynamic src = "MSFT";
var binding = new BasicHttpBinding();
var endpoint = new EndpointAddress("http://www.restfulwebservices.net/wcf/StockQuoteService.svc");
var channel = new ChannelFactory<IStockQuoteService>(binding, endpoint).CreateChannel();
// this will print just fine
Console.WriteLine(channel.GetStockQuote(src as string));
// this will print just fine
Console.WriteLine(new StockQuoteServiceClient().GetStockQuote(src));
// this will never print and the application will hang with no exceptions
Console.WriteLine(channel.GetStockQuote(src));
- Usługa powyżej jest publiczna, nie jest moja, i można przetestować ten kod siebie, czy po prostu dodać odwołanie do punktu końcowego usług przewidzianych w kodeksie;
StockQuoteServiceClient
została utworzona przez element menu Dodaj usługę odniesienia i pobiera obiekty dynamiczne;- To magicznie się nie dzieje, gdy uruchamiam aplikację z F5 podczas debugowania, wszystkie linie są drukowane, a program wychodzi poprawnie;
- Jeśli uruchomię go, a następnie załączę debugger podczas wykonywania, widzę zawieszony na wywołanie
channel.GetStockQuote(src)
; - Jeśli zostanę, program pożera całą moją pamięć;
- Zawiesza się tylko, gdy korzystam z własnego obiektu
ChannelFactory
z obiektami dynamicznymi, zgodnie z opisem w komentarzach.
Dlaczego mój zawiesza się, gdy pobiera dynamiczne obiekty jako parametry, gdy utworzone przez Add Service Reference działa dobrze?
Korzystanie z odbicia również działa. var method = channel.GetType(). GetMethod ("GetStockQuote"); var value = (StockQuote) method.Invoke (kanał, nowy obiekt [] {src}); – lstern