2012-09-18 45 views
2

我正在尋找一種方式來從NET 4.0應用程序消耗該Web服務:服務的參考,而不是在Web引用一個Metro應用

http://resultsservice.lottery.ie/ResultsService.asmx

像往常一樣,我的服務引用添加到創建服務,顯然是代理,一切似乎很正常,但呼籲「GetResults」方法拋出一個異常:未設置爲一個對象的實例

var service = new LotteryResultsServiceSoapClient("LotteryResultsServiceSoap"); 
var results = service.GetResults(DrawType.EuroMillions, 1); 

對象引用。

這很少見,因爲服務的其他方法(GetProjectedJackpot)工作正常。 我試着添加一個Web引用而不是服務引用,並且令人驚訝的是它工作正常。所以,也許我做錯了什麼。

問題是我無法使用Web引用,因爲我想將此應用程序移植到WindowsRT,並且metro應用程序不支持Web引用。

回答

1

Web引用生成的代理包括傳出HTTP消息頭中的用戶代理值。服務引用生成的代理默認不添加此值。幸運的是,這種行爲是非常有據可查的。

看來,空對象異常是由Service Reference代理中缺少的用戶代理值造成的。由Web引用填充的值是Mozilla/4.0(兼容; MSIE 6.0; MS Web服務客戶端協議4.0.30319.269)。使用Charles Proxy我能夠驗證將此值添加到Service Reference生成的所有Out-going HTTP消息中將解決您的問題。

WCF提供了幾種可能的方式來修改傳出的SOAP消息和HTTP請求。 Here是一篇非常棒的文章,它討論了這些解決方案中的一些幷包含一些好的代碼示例。

+0

此解決方案(客戶端消息檢查器)對我的NET 4.0應用程序非常有用,現在工作正常!但是我無法將它應用到metro應用程序,因爲它是WinRT中不允許的System.Configuration的一些依賴項... –

相關問題