无法使用Xamarin和WCF访问Web服务

Mar*_*coK 2 wcf xamarin.ios ios xamarin

我想使用Xamarin和WCF来使用公共Web服务.对于本演示,我将使用Xamarin.iOS.

这是我正在尝试使用的(公共)Web服务:

http://www.webservicex.net/globalweather.asmx?WSDL
Run Code Online (Sandbox Code Playgroud)

在Xamarin Studio中,我使用Web服务中的URL 添加Web引用.选定的Framework设置为Windows Communication Foundation(WCF).

现在,我使用以下代码连接服务:

var _client = new GlobalWeatherSoapClient();
_client.BeginGetWeather ("Berlin", "Germany", (ar) => {
    var result = _client.EndGetWeather(ar);
}, null);
Run Code Online (Sandbox Code Playgroud)

执行此代码时,我得到了一个System.NullReferenceException.这是问题,为什么它不正常?

最奇怪的部分:当我不使用WCF,但选择.NET 2.0 Web Services作为框架时,一切似乎都运行正常.

我看不出我的WCF代码有什么问题 - 根据文档,一切都应该正常.

我希望有人可以帮助我!提前致谢!

Dim*_*kos 6

你没有关注这些文档.

从该页面引用:

要生成用于Xamarin.iOS项目的WCF服务的代理,请使用Windows上的Silverlight SDK附带的Microsoft SilverlightServiceModel代理生成工具(SLSvcUtil).此工具允许指定维护服务端点配置合规性所需的其他参数.

因此,首先需要在具有slsvcutil的Windows机器上创建代理.通过Xamarin Studio向项目添加WCF引用不起作用.它仅适用于.NET 2.0 Web服务,这就是该选项正常的原因.

第二件事,在使用slsvcutil在Windows上创建代理后,需要将其添加到项目中.

第三,你需要像这样初始化它,使用基本的http绑定(再次,来自上面链接的代码):

var binding = new BasicHttpBinding () {
        Name= "basicHttpBinding",
        MaxReceivedMessageSize = 67108864,
};
//...
client = new Service1Client (binding, new EndpointAddress ("http://192.168.1.100/Service1.svc"));
Run Code Online (Sandbox Code Playgroud)

建议:忘记iOS上的WCF.该文章包含有关客户端 - 服务器通信的其他方法的非常有用的信息.