由于在方法名称后面添加了异步,WCF反序列化了正文错误

时间:2017-12-22 16:29:22

标签: wcf asynchronous xamarin wcf-binding synchronous

我使用方法GetTestValue创建了一个WCF服务。我还创建了一个测试应用程序来测试这项服务。

当我将具有连接服务的此WCF服务添加到测试应用程序时,我只能调用GetTestValueAsync,没有GetTestValue方法。不知何故,这个添加过程在方法名称后面添加了这个异步的东西。因此,在此测试应用程序中,当我调用GetTestValueAsync时,WCF调用正常。我得到了结果。

然后我创建了一个Xamarin交叉应用程序应用程序,我也添加了这个WCF服务,当我从这个应用程序调用{​​{1}}时,我收到以下错误:

  

对操作“ GetTestValue ”反序列化请求消息正文时出错。 OperationFormatter遇到无效的Message正文。预计会找到名为“GetTestValue”和名称空间“http://tempuri.org/”的节点类型“Element”。找到名称为“ GetTestValueAsync ”的节点类型“元素”和名称空间“http://tempuri.org/

在测试项目中有些奇怪,它工作正常,并且在Xamarin交叉应用程序中没有。

  1. 有人遇到同样的问题吗?
  2. 为什么此连接服务始终是GetTestValueAsync我的方法名称?
  3. 如何停止将此Async添加到方法名称?

    感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

目前,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?

答案 1 :(得分:0)

我知道这已经很老了,但是我遇到了同样的问题,搜索了一段时间。在项目中添加引用时,可以检查“生成同步操作”,并且不再生成“异步”后缀。我的VS使用德语运行,因此我只翻译了选项。如果您添加新方法,则也会考虑该设置。

来自德国的问候。