我目前正在开发一个项目,我必须通过wcf客户端来管理一个应用程序。我面临的问题是,在打电话给服务器之后,我需要客户端等待回调。这里是场景:让wcf客户端等待回调
我打电话给服务,显示一个窗口,然后服务器应用程序是空闲的。当我点击窗口上的一个按钮时,它会回调客户端。在此期间,客户端UI必须被禁用 - 它必须等待回调。你能告诉我怎样才能做到这一点?它与“并发模式”或“操作合同”属性有关吗?
这是我的的ServiceContract和CallbackContract代码:
[ServiceContract(CallbackContract = typeof(IWCFServiceCallback))]
public interface IWCFService
{
[OperationContract]
void OpenWindow();
}
public interface IWCFServiceCallback
{
[OperationContract(IsOneWay = true)]
void ReturnValue(object[] value);
}
感谢您的回复。我会在调用一个方法之后添加一个方法,我希望客户端的行为与方法本身返回值(不带回调)相同 - 客户端一直等到服务完成其工作并返回一个值。我无法手动锁定UI,因为客户端是一个Excel插件,它没有我可以禁用的窗体/窗口。 – Bartek
在Excel打开FunctionWizard时调用服务,所以我不能锁定单元格,因为它会导致Excel崩溃。 – Bartek
@Bartek - 然后,这是一个不同的问题,单独的问答。我相信我已经提供了这个问题的答案,但是如果不让我知道,我会尽力进一步提供帮助。仅供参考请注意,微软在其示例代码中偏离了其自己的[推荐命名约定](https://msdn.microsoft.com/en-us/library/mt674882.aspx#Anchor_7)。异步函数应该在其名称后附加“Async”。当然,我们在这里看不到'async'关键字,但这仍然是一个异步体系结构。 – InteXX