Questa domanda è legata alla Bug in the dynamic language runtime in combination with IIS 7.5bug ChannelFactory con argomenti dinamici
ChannelFactory
si blocca se fornisco con un digitati correttamente oggetto dinamico.
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));
- Il servizio di cui sopra è pubblico, non è mio, e si può verificare questo codice da soli se si aggiunge solo il riferimento al servizio fino al punto finale prevista nel codice;
StockQuoteServiceClient
è stato creato dalla voce di menu Aggiungi riferimento servizio e prende gli oggetti dinamici bene;- Questo magicamente non accade quando lancio l'applicazione con F5 su Debug, tutte le linee vengono stampate e il programma esce correttamente;
- Se lo eseguo e quindi allego il debugger durante l'esecuzione, posso vederlo sospeso sulla chiamata a
channel.GetStockQuote(src)
; - Se lo lascio stare, il programma mangia tutta la mia memoria;
- Si blocca solo quando utilizzo il mio
ChannelFactory
con oggetti dinamici, come descritto nei commenti.
Perché il mio ChannelFactory
si blocca quando prende gli oggetti dinamici come parametri quando quello creato da Aggiungi servizio riferimento viene eseguito correttamente?
L'uso della riflessione funziona anche. var method = channel.GetType(). GetMethod ("GetStockQuote"); var value = (StockQuote) method.Invoke (canale, nuovo oggetto [] {src}); – lstern