.net – NServiceBus Bus.Send().注册(回调)在IIS / Windows Ser
我几天来一直在努力解决这个问题,我似乎无法弄明白.
我有一个托管在IIS和Windows Server 2008 R2上的简单WCF Web服务. Web服务的实现如下: var completionResult = new CompletionResult(); var updateTextMessage = new UpdateText { TextTemplateId = textTemplateId,Text = text }; var asyncResult = Global.Bus.Send(updateTextMessage).Register(x => completionResult = x.AsyncState as CompletionResult,null); asyncResult.AsyncWaitHandle.WaitOne(10000); if (completionResult.Messages != null && completionResult.Messages.Length > 0) { return ((UpdateTextResponse)completionResult.Messages[0]).ImageData; } return string.Empty; 我知道尝试以同步方式使用NSB被认为是糟糕的设计,但我只是在试验,我真的想让它工作.所以问题是消息被成功发送到远程端点并且消息被成功处理,但是当远程端点执行Bus.Reply时,回复消息在以太网中丢失.我正在使用最新版本的NSB,奇怪的是这在我的Windows 7开发机器上运行良好.我已确保两台计算机上的活动目录都已关闭.我还在接收端点上运行了Wireshark,当然我在分组数据中看到了传入的消息.似乎有些东西不是用IIS来讨价还价.我还将两个端点的日志记录阈值切换为DEBUG,并且没有任何异常情况发生.发送端点说通常“向…发送消息”这是我的Application_Startup中的Web组件代码: Bus = NServiceBus.Configure.WithWeb() .Log4Net() .DefaultBuilder() .XmlSerializer() .MsmqTransport() .IsTransactional(false) .PurgeOnStartup(false) .UnicastBus() .ImpersonateSender(false) .CreateBus() .Start(); 以下是端点的配置: IIS Config (this side is not getting the response) <MsmqTransportConfig InputQueue="Web.InputQueue" ErrorQueue="Web.ErrorQueue" MaxRetries="5" NumberOfWorkerThreads="1"/> <UnicastBusConfig> <MessageEndpointMappings> <add Messages="Messages" Endpoint="Node.Distributor.DataInputQueue"/> </MessageEndpointMappings> </UnicastBusConfig> --------------------------------------------------------------- Endpoint which does the reply <MsmqTransportConfig ErrorQueue="Node.ErrorQueue" InputQueue="Node.InputQueue" MaxRetries="5" NumberOfWorkerThreads="1"/> <UnicastBusConfig DistributorControlAddress="Node.Distributor.ControlInputQueue" DistributorDataAddress="Node.Distributor.DataInputQueue" /> 我还创建了两个独立的NServiceBusHost应用程序来测试通信,并且它成功运行.我还硬编码了返回地址并用.Send替换了.Reply,但是指定了实际的目标,但它仍然无效.所以它似乎又与IIS有关.任何帮助将不胜感激! 解决方法
我解决了这个问题.事实证明,回复丢失的原因是因为我正在引用分销商这样的事实:
<UnicastBusConfig DistributorControlAddress="Node.Distributor.ControlInputQueue@10.1.4.58" DistributorDataAddress="Node.Distributor.DataInputQueue@10.1.4.58" /> 但事实证明,NServiceBus分销商不喜欢IP.所以我把它改成了以下内容: <UnicastBusConfig DistributorControlAddress="Node.Distributor.ControlInputQueue@HOSTNAME" DistributorDataAddress="Node.Distributor.DataInputQueue@HOSTNAME" /> 这解决了这个问题.我还必须在Windows中更新我的hosts文件,因为NSB / MSMQ使用主机名.我不确定这是否是NServiceBus中的错误,或者它是否是已知问题但是如果它还没有,那么它应该被记录下来. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-7 – 如何使用IE10获取HTML5视频
- windows – 如何克隆计算机以为每个计算机提供唯一的计算机
- windows-7 – 如何远程查看用户登录Windows 7或Vista的用户
- 剪贴板在Windows中如何工作?
- windows下进程间通信方法
- Win10 x64 安装Eplan P8 2.7 小结
- windows-phone-8.1 – Windows Phone 8.1应用程序中的部署错
- active-directory – 从SBS2011到2012 R2和新域的AD迁移
- .net – 在非Metro应用程序中使用自定义Windows运行时组件
- Windows批处理脚本:将所有输出重定向到文件