【问题标题】:WCF deserializing body error because of adding async behind the method name由于在方法名称后面添加异步,WCF 反序列化正文错误
【发布时间】:2017-12-22 16:29:22
【问题描述】:

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

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

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

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

在测试项目中它工作正常,但在 Xamarin 跨应用程序中却没有。

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

我怎样才能阻止这个Async被添加到方法名称中?

感谢您的帮助。

【问题讨论】:

    标签: wcf asynchronous xamarin wcf-binding synchronous


    【解决方案1】:

    目前 Xamarin 应用与 WCF Web Service Reference 连接的服务提供商生成的基于任务的异步 WCF 代理方法不兼容 (bugzilla.xamarin.com Bug 51959)。

    生成旧的、兼容样式的 WCF 代理方法的一种方法是在 Developer Command Prompt 中使用 /async/tcv:Version35 开关运行 SvcUtil.exe。这将生成同步代理方法、Begin/End 样式异步编程模型 (APM) 回调代理方法和基于事件的代理方法,所有这些都与 Xamarin 应用程序兼容。

    (注意:如果省略/async 开关,SvcUtil.exe 将生成更新的、不兼容的基于任务的代理方法。)

    重复:偶然地,我首先回答了这个问题的更新: How to use WCF services in .netstandard with Xamarin.Forms project?

    【讨论】:

      【解决方案2】:

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

      来自德国的问候。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多