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

问题描述 投票:0回答:1

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

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

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

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

不知何故,在测试项目中,它工作得很好,并且在Xamarin交叉应用程序中没有。

  1. 有人有同样的问题吗?
  2. 为什么这个连接服务总是这个Async到我的方法名称?

如何阻止将Async添加到方法名称中?

谢谢你的帮助。

wcf asynchronous xamarin wcf-binding synchronous
1个回答
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?

© www.soinside.com 2019 - 2024. All rights reserved.