Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与NServiceBus的异步WCF集成_C#_Wcf_Asynchronous_Nservicebus - Fatal编程技术网

C# 与NServiceBus的异步WCF集成

C# 与NServiceBus的异步WCF集成,c#,wcf,asynchronous,nservicebus,C#,Wcf,Asynchronous,Nservicebus,我是NServiceBus的新手,正在尝试做一些似乎比它应该做的更难的事情……因此,如果我错过了nsb更大的图景,我开始犹豫 以下是场景: 向客户机公开WCF端点,客户机向其请求长时间运行的操作 我想将入站请求映射到NServiceBus消息 将消息发布到总线以进行处理 向客户端发送回复,确认已收到他们的请求,我们将开始处理该请求 总线通过处理程序处理消息 工作完成后,在客户机的“回调”端点(wcf)上回调客户机,以向客户机提供其发出的长时间运行请求的结果 我欢迎可能有用的纠正性批评、示例或

我是NServiceBus的新手,正在尝试做一些似乎比它应该做的更难的事情……因此,如果我错过了nsb更大的图景,我开始犹豫

以下是场景:

  • 向客户机公开WCF端点,客户机向其请求长时间运行的操作
  • 我想将入站请求映射到NServiceBus消息
  • 将消息发布到总线以进行处理
  • 向客户端发送回复,确认已收到他们的请求,我们将开始处理该请求
  • 总线通过处理程序处理消息
  • 工作完成后,在客户机的“回调”端点(wcf)上回调客户机,以向客户机提供其发出的长时间运行请求的结果

我欢迎可能有用的纠正性批评、示例或链接。提前谢谢你

根据NServiceBus,您可以将NSB端点公开为WCF服务:

互操作性

您可以将NServiceBus端点公开为WCF服务,并使用 只需一行代码和标准WCF配置。你们所有人 需要做的是编写一个继承自的空类 NServiceBus.WcfService指定请求的类型和 响应和NServiceBus执行以下操作:

公共类MyService:NServiceBus.WcfService{}

我已经做了一些工作,将遗留的MSMQ客户端与NServiceBus集成在一起-它可以工作,但您必须确保消息构造正确

发送到NServiceBus端点的消息必须封装在
信封中,并且必须具有命名空间。例如:

<Messages xmlns="http://tempuri.net/MyNservicebusMessage">
  <MyNservicebusMessage body/> ...etc
</Messages>

此外,如果要使用NServiceBus审核,则必须确保MSMQ“Response Queue”消息头具有值,尽管我认为该值并不重要。

您可以通过NSB管道执行此操作。可以将处理程序配置为按指定的顺序执行。在您的情况下,本书以通知结尾。根据用例的不同,最好将通知转发给另一个只处理这些通信类型的端点。你需要考虑的是失败场景。如果处理程序失败并重试消息,会发生什么


这都是基于您不需要维护状态的想法。如果您这样做了,那么您将需要考虑使用。这将保持每个长时间运行的事务的状态,并为您提供可能需要的更多功能,例如超时。

长时间运行的进程可以是同步的,也可以是异步的。不可能两者都有

您可以使用NServiceBus异步处理长时间运行的任务并生成进度信息。亚当提到了这个传说。你可以用一个传奇来记录进展。它还将帮助您将流程划分为更细粒度的任务,并提供诸如自动重试之类的功能,免费处理瞬时故障


但是,您必须使用另一种机制将进度信息发送回用户。定期轮询、长轮询、隐藏的iframe、websockets等等——看看signer公开的想法。有一段很好的视频谈到了向浏览器发送通知。

您正在使用哪些WCF绑定?@Chris我不确定这会有什么不同?我不能使用wcf回调合同(我不认为)。我们将运行IIS 7,很可能是wsHttp。不过,此解决方案适用于同步场景。我的场景的关键点是,我有一个长时间运行的任务,需要在获得结果后将客户端回调。