我有一个 WCF 服务,我正在使用 VS 2010 中的“添加服务引用”创建客户端。
问题是虽然未选中“生成异步操作”选项,但正在异步调用服务。
那么如何同步调用服务呢?这种行为在哪里定义(在客户端或服务器上)?我是 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/