C# 初学者WCF问题-可消费异步服务

C# 初学者WCF问题-可消费异步服务,c#,.net,wcf,soa,C#,.net,Wcf,Soa,这是一个更“能做到”的问题,而不是一个“如何做到”的问题。我正在考虑构建一个服务(中间层,.net,提供数据抽象和一些业务逻辑),该服务将由不同平台上的多个内部客户端系统使用。例如,一个客户端可能是网站,另一个客户端可能是java代码,另一个客户端可能是C#等等 我想在我的服务中提供同步和异步API,例如GetData、BeginGetData、EndGetData方法。我还希望客户端能够注册系统中添加的新“数据”的通知。在过去,我使用web服务和Tibco EMS通知通道实现了这一点 我的问题

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

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

我的问题是:我可以通过公开WCF服务来实现这三个要求(同步、异步和发布/订阅)吗?非WCF客户端是否可以使用此服务

请原谅这个问题含糊不清——我可以根据需要详细说明


提前感谢。

默认情况下,方法是同步的。要使它们异步,需要添加此属性[OperationContract(AsyncPattern=true)]并返回IAsynchResult,就像对winforms执行BeginIvoke()时一样。(请在此阅读更多)


你可以用一种叫做回调契约的东西来发布/订阅(虽然我不确定是否在其他平台上实现),我对这些东西没有太多的经验,但它们似乎还没有完成(你可以在这里阅读更多)

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

客户端异步选项的问题是您需要在Java中复制代码。Svcutil确实会按照您的指定导出VB或C代码,因此您很可能无需做太多工作就可以将C代码翻译成Java

对于发布/订阅,客户端回调是您想要的操作方式。我正在使用它们,它们工作得很好。在根级别,它们是.Net远程处理,并使用事件将数据传递给客户端(据我所知)。我无法确认这是否可以跨平台使用,但需要做一些工作。

WCF pub/sub不是.net远程处理:它是双向契约的全双工消息交换。实际上,它比你在.net远程处理中所能做的限制要多一些,但我想这是更多基于合同的成本