当前位置: 首页 > 知识库问答 >
问题:

不使用ServiceReference同步调用异步WCF方法

宋经赋
2023-03-14

共有1个答案

吴品
2023-03-14

不幸的是,声明服务器OperationContract的三种不同方式在服务契约程序集中创建了不同的接口签名:

  • 纯同步fooresponse Foo(FooRequest)
  • APM异步IAsyncResult BeginFoo(FooRequest)/fooresponse EndFoo(IAsyncResult)
  • 点击异步任务 FooAsync(FooRequest)

然而,WCF对待这些都是一样的“线上”。Add Service Reference能够自动将ServiceContract转换为支持客户端所需样式的副本(在Reference.cs中)。

从这个答案中得到一些提示,有一个更简单的方法

  • 保留当前同步服务合同
  • 将整个服务契约的新异步版本创建为 async ,但保持相同的服务契约属性和操作
  • 将所有操作方法切换到上面的fooasync样式
  • 如果名称是隐式的,ServiceContact.Name
  • 则指定 ServiceContact.Name与旧的服务约定相同
  • 更改服务器以实现服务协定的异步版本,而不是同步版本

然后,您的客户机可以继续使用原始的同步接口与旧服务器或新服务器对话。

 类似资料:
  • 同步调用异步方法最安全的方法是什么?

  • 我正试图从同步方法运行异步方法。但是我不能等待异步方法,因为我在同步方法中。我一定不理解TPL,因为这是我第一次使用它。 每个方法都需要前一个方法来完成,因为第一个方法的数据用于第二个方法。 Await运算符只能在异步方法中使用。考虑用'async'修饰符标记此方法,并将其返回类型更改为'task' 但是,如果我使用async修饰符,这将是一个异步操作。因此,如果我对的调用没有使用await运算符

  • 我的代码有点像这样:所以我想异步调用SendSms部分。我该怎么做?我可以简单地使用task.run Async和await吗?

  • 我正在为一家德国公司评估Dart,将各种Java程序移植到Dart,并对结果进行比较和分析。在浏览器中,飞镖轻松获胜。对于服务器来说,软件性能似乎是一个严重的问题(请看我的这个问题),但这基本上得到了缓解。 现在我正在移植一些“简单”的命令行工具,我没想到会有任何严重的问题,但至少有一个问题。一些工具确实会发出HTTP请求来收集一些数据,独立的Dart虚拟机只以异步方式支持它们。纵观所有我能找到的

  • 问题内容: 在过去的几个小时中,我一直在努力解决这个问题,但无法解决。我想我仍然必须习惯于函数式编程风格;) 我写了一个递归函数,它遍历目录结构并对某些文件进行处理。此功能使用异步IO方法。现在,我要在完成整个遍历后执行一些操作。 如何确保在执行完所有调用但仍使用异步IO功能后执行此操作? 问题答案: 查找“ 步骤”模块。它可以链接异步函数调用,并将结果从一个传递到另一个。

  • 问题内容: 首先,这是一个非常特殊的情况,它以错误的方式故意将异步调用改型为一个非常同步的代码库,该代码库长成千上万行,并且当前时间不具备进行更改的能力。对的。” 它伤害了我的每一个生命,但是现实和理想往往并没有相互融合。我知道这很糟糕。 好的,顺便说一句,我该如何做,这样我可以: 示例(或缺少示例)全部使用库和/或编译器,这两种库均不适用于此解决方案。我需要一个如何使其冻结的具体示例(例如,在调