我用.netstandard 2.0创建了一个Xamarin.Forms项目作为PCL项目。我正在尝试在该项目中使用WCF服务。我已经为WCF服务添加了连接服务。当我试图调用服务中提供的任何方法时,它会给出如下错误:
System.ServiceModel.FaultException`1 [[System.ServiceModel.ExceptionDetail, System.ServiceModel,Version = 2.0.5.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35]]:反序列化主体时出错 请求操作'GetData'的消息。 OperationFormatter 遇到无效的Message正文。预计会找到节点类型 'Element',名称为'GetData',名称空间为'http://tempuri.org/'。 找到名为“GetDataAsync”和名称空间的节点类型“Element” 'http://tempuri.org/'
我也尝试将.netstandard版本更改为旧版本,但它也会出现同样的错误。
答案 0 :(得分:6)
目前,Xamarin应用程序与WCF Web Service Reference连接的服务提供商为.NET Standard项目生成的基于任务的异步WCF代理方法不兼容(bugzilla.xamarin.com Bug 51959)。
生成较旧,兼容的WCF代理方式的一种方法是使用SvcUtil.exe
中的/async
和/tcv:Version35
开关运行Developer Command Prompt。这将生成同步代理方法,开始/结束样式异步编程模型(APM)回调代理方法和基于事件的代理方法,所有这些方法都与Xamarin应用程序兼容。
(注意:如果省略/async
切换,SvcUtil.exe
将生成较新的,不兼容的基于任务的代理方法。)
答案 1 :(得分:1)
通过“配置WCF Web服务参考”屏幕上的“生成同步操作”复选框,生成较旧的WCF代理方法兼容样式:
使用Web服务:
KimlikServiceReference.KPSPublicSoapClient soapClient = new KimlikServiceReference.KPSPublicSoapClient(KimlikServiceReference.KPSPublicSoapClient.EndpointConfiguration.KPSPublicSoap);
//KimlikServiceReference.TCKimlikNoDogrulaResponse response = soapClient.TCKimlikNoDogrulaAsync(TCKimlikNo, Ad, Soyad, DogumYili).Result;
bool result = soapClient.TCKimlikNoDogrula(TCKimlikNo, Ad, Soyad, DogumYili);