我正在寻找一种从.NET 4.0应用程序中使用此Web服务的方法:
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引用。
答案 0 :(得分:1)
Web引用生成的代理在传出HTTP消息的标头中包含User-Agent值。默认情况下,服务引用生成的代理不会添加此值。幸运的是,这种行为有很好的记录。
似乎空对象异常是由服务引用代理中缺少的User-Agent值引起的。 Web引用填充的值是Mozilla / 4.0(兼容; MSIE 6.0; MS Web服务客户端协议4.0.30319.269)。使用Charles Proxy我能够验证将此值添加到服务引用生成的所有外出HTTP消息将解决您的问题。
WCF提供了几种修改传出soap消息和HTTP请求的方法。 Here是一篇非常好的文章,讨论了其中的几个解决方案并包含了一些很好的代码示例。