初学者WCF问题 – 消耗性异步服务

这是一个“可以做到的”,而不是“怎么做”的问题。 我正在寻找构建一个服务(中间层,.net,提供数据抽象和一些业务逻辑),将由不同平台上的多个内部客户端系统使用。 例如,一个客户端可能是一个网站,另一个客户端可能是一些Java代码,另一个客户端可能是C#

我想在我的服务中提供同步和异步API,例如GetData,BeginGetData,EndGetData方法。 我还希望客户能够注册添加到系统中的新“数据”的通知。 在过去,我使用带有Tibco EMS通道的Web服务来实现此通知。

我的问题是:我可以通过公开WCF服务来实现三个要求(synch,asynch和pub / sub)吗? 非WCF客户端可以使用此服务吗?

请原谅这个问题的模糊性 – 我可以根据需要详细说明。

提前致谢。

方法默认是同步的。 要使它们成为异步,你需要添加这个属性[OperationContract(AsyncPattern = true)]并返回一个IAsynchResult,就像你用winforms做BeginIvoke()一样。 (在此处阅读更多信息http://msdn.microsoft.com/en-us/library/ms734701.aspx )

您可以使用称为回调契约的东西进行发布/订阅(虽然我不确定在其他平台中实现这一点)我对这些没有太多经验,但它们似乎没有大量编译(您可以在这里阅读更多内容http: //dotnetaddict.dotnetdevelopersjournal.com/wcf_alarmclock.htm )

通过设置AsyncPattern = true可以在Ninja上设置异步操作,也可以在客户端通过告诉svcutil通过设置正确的命令行参数或通过选中“Generate”来生成异步端点来完成异步操作“svcutil的GUI版本中的选项。 生成异步仍然会生成同步操作。

客户端异步选项的问题是您需要在Java中复制代码。 Svcutil会根据您的指定导出VB或C#代码,因此您很可能将C#代码转换为Java而无需太多工作。

对于Pub / Sub,客户端回调是您想要操作的方式。 我正在使用它们并且它们工作得非常好。 在根级别,它们是.Net Remoting并使用事件将数据传递给客户端(我的理解)。 我不能确认这可以跨平台使用,但它应该与一些工作。