首页 / C# / C#-WCF服务依赖项
C#-WCF服务依赖项
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-WCF服务依赖项,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2331字,纯文字阅读大概需要4分钟。
内容图文
![C#-WCF服务依赖项](/upload/InfoBanner/zyjiaocheng/676/a9a4a50ef1d2479184f782e19ab30028.jpg)
我分别具有三个wcf服务A,B和C,因为我希望它成为SOA(面向服务的体系结构),所以我的设置工作的方式是从客户端向服务器发送请求时.
>所有服务都是自托管的Windows服务.
>客户端向服务A发送请求(客户端不了解其他服务B和C);
>服务A最终将该请求发送到服务B和服务C.
服务B和C将响应发送回服务A,服务A将响应发送回客户端.
我面临的问题:如果我在服务B的代码中进行了任何更改,然后重新生成并重新启动服务,则在返回响应时会遇到问题,但是当我重新启动所有其余的服务时,它将可以正常工作.
换句话说,即使我只更改了一个服务中的代码并重新构建它,除非我重新启动所有服务(A,B和C),否则我的客户端不会获得响应,我知道如果我重新启动所有服务,事情就可以了三个服务,但我想知道这是我设计方式中的问题,还是我必须处理自托管Windows服务的问题.而且所有服务(A,B,C)都是独立的,因为彼此之间不依赖.
有没有人看到SOA中发生过这样的事情.如果有人可以指导我找到适当的解决方案,我会感到高兴吗?
解决方法:
>用任何种类的队列替换服务之间的WCF(一个服务发布内容,其他服务准备就绪时可以读取).可以是任何东西.可以是一个简单的表,如果有新内容可以从中读取.可以是RabbitMQ,NServiceBus等,任何适合您的方法.
>定义您放入队列中的消息:命令和事件.两者都是带有属性的简单类,那里没有逻辑.命令表示系统被要求执行的操作(RegisterUser,PlaceOrder等),事件表示系统已执行的操作(UserRegistered,OrderApproved,PaymentReceived等).要明确说明操作,请勿执行“我已更改了客户端上用户的所有属性,现在我称为SaveUser(user)”之类的操作.您的服务假设知道如何更改对象,客户端应仅命令做什么.
>永不违约.这比听起来容易,容易:您可以在消息合同中添加内容,但不能删除.换句话说,您只需保持合同向后兼容即可.
现在您有了一个更好的设计:服务仅通过队列中的消息进行通信,消息是向后兼容的.这意味着您可以随时停止任何服务而不会影响其他服务:它们将继续将消息发送到队列中,并且当停止的服务再次返回时,它将赶上处理队列中所有内容的过程.
然后,如果需要,可以对客户端交互使用相同的方法:如果不调用WCF,客户端只会将其命令放在某种队列中,则服务升级或其他停机时间不会影响用户体验.
例如:如果我使用WCF下订单或将物品放入购物卡,则如果有问题或服务需要维修,我将无法做到.我会点击一个按钮,然后出现一个令人讨厌的错误.更重要的是,我的订单不会纳入系统.
相反,如果中间有一个队列,则仅将命令放入队列.现在,即使我的服务此刻处于关闭状态,或经历了很高的负载(因此也很慢),我的用户体验仍然是相同的,并且不会降低.只是我的命令会在稍后处理,但是作为客户端,我并不在乎.在这种情况下,我的订单不会丢失.系统变得容错且自平衡.
如果您只是在中间放置一个队列,而不是遇到WCF附带的时空耦合问题,则可以采取各种奇妙的技巧:)
而我所描述的仅仅是开始…
内容总结
以上是互联网集市为您收集整理的C#-WCF服务依赖项全部内容,希望文章能够帮你解决C#-WCF服务依赖项所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。