我用方法GetTestValue
创建了一个WCF服务。我还创建了一个测试应用程序来测试这项服务。
当我将这个连接服务的WCF服务添加到测试应用程序时,我只能调用GetTestValueAsync
,没有GetTestValue
方法。不知何故,这个添加过程在方法名称后面添加了这个异步的东西。所以在这个测试应用程序中,当我调用GetTestValueAsync
时,WCF调用正常。我得到了结果。
然后我创建了一个Xamarin交叉应用程序应用程序,我也添加了这个WCF服务,当我从这个应用程序调用GetTestValueAsync
时,我收到以下错误:
对操作'GetTestValue'反序列化请求消息体时出错。 OperationFormatter遇到无效的Message正文。预计会找到名为“GetTestValue”的节点类型“Element”和名称空间“http://tempuri.org/”。找到名为'GetTestValueAsync'的节点类型'Element'和命名空间'http://tempuri.org/'
不知何故,在测试项目中,它工作得很好,并且在Xamarin交叉应用程序中没有。
Async
到我的方法名称?如何阻止将Async
添加到方法名称中?
谢谢你的帮助。
目前,Xamarin应用程序与WCF Web Service Reference连接服务提供商生成的基于任务的异步WCF代理方法不兼容(bugzilla.xamarin.com Bug 51959)。
生成旧的兼容样式的WCF代理方法的一种方法是使用SvcUtil.exe
中的/async
和/tcv:Version35
开关运行Developer Command Prompt。这将生成同步代理方法,开始/结束样式异步编程模型(APM)回调代理方法和基于事件的代理方法,所有这些方法都与Xamarin应用程序兼容。
(注意:如果省略/async
开关,SvcUtil.exe
将生成更新的,不兼容的基于任务的代理方法。)
重复:偶然,我首先回答了这个问题的最新副本:How to use WCF services in .netstandard with Xamarin.Forms project?