在Xamarin.forms中调用Web服务(asmx)时遇到问题。我的网络服务可以在Android上运行,并且是通过svcutil.exe
生成的,但是当我在IOS中对其进行测试时,我遇到了一个问题:
“ Mono touch不支持动态代理代码生成”
搜索后,我发现必须使用称为SLSvcutil.exe
的Silverlight工具才能覆盖CreateChannel
方法并使其在IOS中起作用。它有效,但是我需要使方法同步(不异步)。
我一直在搜索如何为我的Web服务制作纯同步方法,结果发现:Monotouch/WCF: How to consume the wcf service without svcutil
这是我的代码:
protected override POService2Soap CreateChannel()
{
return new POService2SoapClientChannel(this);
}
private class POService2SoapClientChannel : ChannelBase<POService2Soap>, POService2Soap
{
public POService2SoapClientChannel(System.ServiceModel.ClientBase<POService2Soap> client) :
base(client)
{
}
public ClientLoginResponse ClientLogin(ClientLoginRequest request)
{
object[] _args = new object[1];
_args[0] = request)
return (ClientLoginResponse)base.Invoke("ClientLogin", _args);
}
我从Silverlight生成的代码获取接口,并在那里创建LoginResponse类,但问题出在我调用base.invoke("Client Login",_args)
的地方。
基本上,ChannelBase没有 Invoke 方法,只有 BeginInvoke 和 EndInvoke 。所以我得到了问题,因为ClientBase的ChannelBase类中没有Invoke。我该如何调用它,或者没有人有更好的解决方案来从Web服务获取同步结果?
P.S。 我知道为什么Silverlight具有 async 方法,而且我知道现在最好异步,而且我还知道,尤其是在移动开发中,Web服务(asmx)有点“过时” 。但就我而言,我需要这样。
谢谢。