`
jiq408694711
  • 浏览: 36522 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

关于项目中NServiceBus和MEF注入(WCF服务代理失效)的两个问题

 
阅读更多

问题之一:

最近一个项目两个NServiceBus终结点,一个运行在客户端,一个运行在服务器端。

客户端的MasterNode设置为服务器端的地址,这样就不需要在客户端安装NServiceBus的软件,而不会报RavenDB连接失败的错误了。

但是启动的时候会报错:“无法创建队列,或者没有对应的权限”。win7下面,管理员权限运行也是一样。暂时的解决方法是手动创建一个事务性的消息队列。


然后我又安装服务器端的终结点,首先安装了NServiceBus的软件(这个软件主要就是安装RavenDB,安装消息队列等。),然后启动服务端的终结点,仍然是同样的错误,由此可知这个错误和是否安装了NServiceBus的软件是没有关系的。


这个问题亟需解决,不可能让用户用我的软件还要去手动创建一个消息队列吧。


解决方法:

目前我暂时的解决方法就是利用.Net中的MessageQueue这个类的create方法显示创建消息队列,注意第一个参数是消息队列名称,第二个参数设置为true表示创建的消息队列为事务型消息队列。


问题之二:

我在NServiceBus启动的start函数中利用MEF注入了两个类,在定时器中定时调用这两个类的方法,开始一段时间大概几十分钟的样子运行没有问题。

但是时间长了,就会抛出异常:“The communication object. System.ServiceModel.Channels.ServiceChannel. can not be used for communication beacause it is in the faulted state”,有时候异常是“The socket connection has disconnected...


开始我以为是MEF启动时候注入一次对象,之后定时器中定期使用这两个对象,时间长了这两个对象失效了。。。

后来和别人聊到这个问题,才注意到可能和WCF服务有关,然后才发现我是在注入对象的类的构造函数中创建了WCF服务代理,之后每次在定时器的这两个对象的调用的方法中调用了WCF服务,时间长了WCF服务就失效了。。。


解决方法:

(1)每次调用定时器都重新Compose一次,即重新进行一次MEF对象注入;每次都注入,都意味着每次都会创建新的WCF服务代理,所以效率较低。

(2)还是只在start的时候注入一次,我想MEF注入的对象是不会失效的,因为不是远端代理对象嘛!!! 然后每次调用注入对象的方法中,首先判断WCF服务时候失效,如果失效了就显式重新创建WCF服务代理。

如果判断WCf服务是否失效呢?

很简单,在WCF服务中预留一个空方法,每次调用真正的方法之前调用一次这个方法,捕获异常,如果出现异常,则说明失效了。


分享到:
评论

相关推荐

    ESB--NServiceBus

    全双工通信允许数据同时在两个方向上传输,提高了系统的交互效率。NServiceBus支持这种模式,允许客户端和服务端同时发送和接收消息,实现高效的数据交换。 总结来说,NServiceBus是一个强大的.NET ESB实现,通过...

    NServiceBus-develop

    此外,NServiceBus 的故障转移和自动重试机制确保了即使在系统部分组件出现问题时,整体服务仍能继续运行。 在使用 NServiceBus 开发过程中,开发者需要注意以下关键点: 1. **配置**: 配置是使用 NServiceBus 的第...

    Learning NServiceBus, 2nd Edition.pdf

    标题:“Learning NServiceBus, 2nd Edition.pdf”和“Learning NS*** Enterprise Service Bus”表明了本书是关于NServiceBus的第二版。NServiceBus是一个在.NET环境中广泛使用的企业级服务总线(Enterprise Service...

    .Net最流行的开源企业服务总线 NServiceBus.zip

    NServiceBus 是一个.Net平台下开源的消息服务框架,这类产品有时也被称作ESB(Enterprise Service Bus)——企业服务总线。NServiceBus也是dotnet世界里面最流行的开源企业服务总线。 NServiceBus 是一个用于构建企业...

    轻轻松松SOA:NServiceBus

    在本文中,作者通过一个实际的项目——Workflow系统,展示了如何利用NServiceBus进行消息传递,特别是在发送电子邮件场景中的应用。Workflow系统是一个为荷兰呼叫中心定制的管理流程软件,采用了领域驱动设计(DDD)...

    NServiceBus.Wcf

    NServiceBus.Wcf 支持在WCF和消息传递基础结构之间架起桥梁的WCF服务的简单托管。

    nServiceBus and BizTalk Server.docx

    9. **维护和升级**:集成后的系统需要考虑长期的维护和升级策略,确保两个平台的更新不会中断服务。 10. **成本效益分析**:选择集成方案时,应综合考虑项目需求、现有技术栈、资源限制和长远规划,权衡nServiceBus...

    NServiceBus:NET最受欢迎的服务总线

    如果看到构建失败,请检查是否没有将NServiceBus的源放在深子目录中,因为MSBuild不支持长路径名(大于248个字符)。 发牌 NServiceBus NServiceBus是根据RPL 1.5许可获得许可的。可以在找到更多详细信息。 如上所...

    从.NET Core WebAPI了解NServiceBus

    在“CarClient.rar”和“CarAPI.rar”这两个压缩包中,很可能是关于汽车服务的客户端和API示例。在这里,NServiceBus可以用来实现客户端(如CarClient)与服务器端(如CarAPI)之间的通信。客户端可能通过发送命令来...

    C#的核心问题-编译器-如何在进程之间进行通信,如何在两个独立的EXE文件之间通信.rar

    本资源主要探讨了如何在两个独立的EXE文件之间实现通信,这对于理解和优化分布式系统、服务间的交互至关重要。下面将详细介绍几种常见的C#进程间通信方式及其优缺点。 1. **命名管道(Named Pipes)** 命名管道是...

    NServiceBus.SqlServer:用于NServiceBusSQL Server传输

    将NServiceBus.SqlServer添加到您的项目。 最简单的方法是安装。 在您的app.config中,确保提供与SQL Server通信所需的必要连接信息。 典型的设置为: ;Initial Catalog=nservicebus;Integrated Security=True> ...

    NServiceBus-RoutingInDataBase

    这个名为 "NServiceBus-RoutingInDataBase" 的项目主要关注如何在 NServiceBus 中实现基于数据库的路由策略。在C#编程环境中,NServiceBus 提供了一种灵活的方式来处理服务间通信,而数据库路由则是在这种通信中引入...

    NServiceBus 开源EBS安装文件

    NServiceBus 开源EBS安装文件

    NServiceBus.SagaAudit:启用对NServiceBus版本6.x终结点的saga状态更改的审核,以简化ServiceInsight中的SagaView状态更改图

    总之,NServiceBus.SagaAudit是NServiceBus框架中的一个重要组成部分,它增强了Saga的可追踪性和可理解性,对于维护和优化基于NServiceBus的分布式系统来说,是一个非常有价值的工具。通过熟练掌握和应用 SagaAudit...

    OA项目学习代码,在工作中也能用到

    2. **.NET Framework**:Visual Studio 2010默认支持的开发环境是.NET Framework 4.0,因此项目可能依赖于该框架的一些特性,如WCF(Windows Communication Foundation)服务、ASP.NET MVC框架等。 3. **数据库管理...

    ESB开源项目研究

    企业服务总线(Enterprise Service Bus,ESB)是企业级集成中的关键组件,它提供了一种灵活、松散耦合的方式来连接不同系统和应用程序,实现服务之间的通信。ESB通常基于消息传递架构,允许数据在各种服务之间流动,...

    NServiceBus.Persistence.Sql:NServiceBus的本机SQL持久性

    NServiceBus.SqlPersistence 添加对支持,以将其持久化到Sql数据库。 文献资料 运行测试 有针对多个数据库引擎的测试。 这些可以安装在您的机器上或在docker容器中运行。 这些测试需要在环境变量中设置连接字符串...

    Community.NServiceBus.2.5.0.1446.zip

    NServiceBus 是一个用于构建企业级 .NET系统的开源通讯框架。它在消息发布/订阅支持、工作流集成和高度可扩展性等方面表现优异,因此是很多分布式系统基础平台的理想选择。,它能够帮助开发人员在搭建企业.NET系统时...

Global site tag (gtag.js) - Google Analytics