wcf - 如何同步调用 WCF 服务

标签 wcf visual-studio-2010 c#-4.0 wcf-binding wcf-behaviour

我有一个 WCF 服务,我正在使用 VS 2010 中的“添加服务引用”创建客户端。

问题是虽然未选中“生成异步操作”选项,但正在异步调用服务。 enter image description here

那么如何同步调用服务呢?这种行为在哪里定义(在客户端或服务器上)?我是 WCF 的新手。请指教

客户端是一个控制台应用程序。

我没有选中“生成异步操作”。
即使这样,代理也包含以下几行,表明该方法被异步调用。不知道为什么:)

 [System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="urn:COBService")]
    [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(MemberType))]
    void ABC(TestProject.ServiceReference1.ProcessCOBRecord request);

    [System.ServiceModel.OperationContractAttribute(IsOneWay=true, AsyncPattern=true, Action="urn:COBService")]
    System.IAsyncResult BeginABC(TestProject.ServiceReference1.ProcessCOBRecord request, System.**AsyncCallback** callback, object asyncState);

    void EndABC(System.IAsyncResult result);

最佳答案

更新

事实证明 WCF 服务配置导致了这种异步行为,特别是 IsOneWay property of the OperationContract attribute .这在技术上不是异步的,但它 "usually gives the appearance of asynchronous call" .

您不必做任何特别的事情,只需调用客户端代理上的普通方法——这就是同步方法。因此,如果您有一个名为 DoSomething 的 WCF 方法,那么您只需调用:

var client = new MyService.MyServiceClient();
client.DoSomething();

client.DoSomethingAsync 是异步方法。

这种区别与客户端行为有关,无论您的应用程序在等待 WCF 服务响应时是否阻塞线程。

关于wcf - 如何同步调用 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11026590/

相关文章:

C++ VS2010 不使用我的调试命令行参数

visual-studio-2010 - 严重错误LNK1104:无法打开文件 'kernel32.lib'

c# - 用 protobuf 替换 binaryformatter

c# - 加密 WCF 消息密码

.net - 向客户端发送 Hibernate 代理类会出现哪些问题

.NET ASMX - 返回纯 JSON?

c# - ViewModel 和 Command 之间的通信

c# - WCF 将自定义对象传递给客户端并运行其方法

c++ - 从 boost 1.48 升级到 1.49 有文件系统路径访问冲突读取位置 0x0000000

javascript - 需要对复选框的已检查更改属性调用 javascript 函数