- 浏览: 36514 次
- 性别:
- 来自: 南京
最新评论
文章列表
今天测试一个程序,偶然发现WCF服务端抛出的异常会跑到客户端。
是这样的,我写了一个WCF服务,客户端调用这个服务,传递一个序列化为字节流的文件过去,服务端接收到这个字节流之后,将其写入到指定目录保存为文件。
我的服务端的实现代码没有catch异常,当创建文件找不到指定目录的时候,发生“can not find directory”的异常。
结果这个异常在客户端抛出。
然后我在服务端catch这个异常,这样就不会再服务器端捕获到了。
一般来说,WCF服务的服务端要捕获异常,客户端的调用部分也要捕获异常(一般会发生WCF服务代理失效,即套接字断开的异常,以及调用WCF服务代理 ...
- 2013-10-15 22:41
- 浏览 335
- 评论(0)
我的项目中客户机上有一个后台运行的Windows服务,专门用于接收来自于服务器发过来的异步消息,然后将这个异步消息发送给Winform界面并显示出来。
用户后台服务会在接收到异步消息后,如果显示消息的Winform界面已经退出,则需要根据该界面所在的路径启动界面,将消息的toString()返回值作为启动参数。
运行之后,发现当后台服务接收到异步 消息,界面并没有如愿弹出来,打开任务管理器发现这个界面的进程是被启动了的。说明windows服务启动这个界面进程成功了,但是无法显示出来。
然后我右击服务,选择“允许与桌面应用程序交互”。再试一次,同样还是无法弹出界面。
======= ...
- 2013-10-11 22:53
- 浏览 2779
- 评论(0)
问题:共享内存在Windows服务和普通进程之间无法工作
我的项目中有一个后台服务,开机自启动,然后会去服务器上获取大数据,缓存在自己的地址空间中。
另外一个进程(Windows Form界面)启动之后会来这个服务这里获取这些数据。
开始为了方便开发调试,我的后台服务并没有做成服务,开发时候就是一个直接的进程,称为进程A。
启动之后从服务器端获取大数据,然后通过共享内存的方式传递给进程B(即那个Windows form界面)。
我采用共享内存方式,因为要说到效率首先就想到共享内存,C#中共享内存的方法封装在MemoryMappedFile类中,CreateNew()创建共享内存 ...
- 2013-09-23 22:01
- 浏览 405
- 评论(0)
我的项目中有两个NServiceBus终结点,一个运行在服务器端,一个运行在客户端,然后服务器端收到后台业务模块服务的异步消息之后,会发送给客户端的NServiceBus终结点。
开始运行都没问题,时间长了,我发现服务器端NServiceBus终结点发往客户端NServiceBus终结点的消息会丢失,大概丢失率是50%的样子,去客户端的消息队列里面查看也没有,说明不是客户端的NServiceBus没有去取出来,而是压根消息队列就没有收到。
然后我就怀疑是不是我的消息队列太多了,然后我就吧“专有队列”下面的消息队列全部删掉了,结果就能正常收发消息了,没有任何消息丢失。。。
难道消 ...
- 2013-09-22 22:33
- 浏览 382
- 评论(0)
待解决的问题:
某些应用程序需要异步发送消息到远端机器的NServiceBus终结点,但是又不希望知道接收并处理异步消息的是NServiceBus这种ESB终结点,也许异步消息处理者将来会换成其他的ESB终结点,所以不能采用Send-Only的方式,否则应用程序(消息发送方)还是需要引入NserviceBus.dll等类库。
所以我的思路是:
应用程序调用我的接口发送消息到指定的私有消息队列,然后NServiceBus终结点有一个线程,接收这样一个消息,这个消息没有实现IComman/Imessage接口,所以还要再将这个消息转换为NServiceBus能够处理的消息类型(实现ICom ...
- 2013-09-21 23:04
- 浏览 591
- 评论(0)
问题之一:
最近一个项目两个NServiceBus终结点,一个运行在客户端,一个运行在服务器端。
客户端的MasterNode设置为服务器端的地址,这样就不需要在客户端安装NServiceBus的软件,而不会报RavenDB连接失败的错误了。
但是启动的时候会报错:“无法创建队列,或者没有对应的权限”。win7下面,管理员权限运行也是一样。暂时的解决方法是手动创建一个事务性的消息队列。
然后我又安装服务器端的终结点,首先安装了NServiceBus的软件(这个软件主要就是安装RavenDB,安装消息队列等。),然后启动服务端的终结点,仍然是同样的错误,由此可知这个错误和是否安装了NS ...
- 2013-09-21 02:00
- 浏览 481
- 评论(0)
WCF与Web Service不同的是,当我们定义了服务契约的操作时,不管是通过ChannelFactory创建服务代理对象,还是通过SvcUtil的默认方式生成服务代理对象,客户端在调用这些代理对象时,都无法直接实现异步方式的调用。例如,对于如下的服务操作定义:
[OperationContract]
StreamTransferDocument(Documentdocument);
在调用代理对象的方法时,我们无法找到对应于TransferDocument()操作的BeginTransferDocument()和EndTransferDocument()异步方法。
这样的设 ...
- 2013-09-12 19:19
- 浏览 358
- 评论(0)
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://oldratlee.com/post/2013-02-01/synchronous-rpc-vs-asynchronous-message
在阿里的平台技术部参与开发了Dubbo(远程调用服务)和Napoli(消息解决方案),又给网站应用支持这2个产品2年,了解了这2个产品的实现及应用对这两个产品的用法。
大部分情况下,“给定场景下应该使用这两个产品中哪个”这个问题,大家都会容易决定,而且不需要多少讨论。
我为什么要拿出来讨论一下:
一些场景会比较模糊,觉得都可以 ...
- 2013-09-11 16:55
- 浏览 968
- 评论(0)
WCF,Hessian,Dubbo,淘宝的HSF,Mars(链接)这些感觉核心都差不多,初学者有待深入啊。
分布式服务框架:
1 Dubbo http://www.iteye.com/magazines/103
2 HSF
HSF实现细节:
#service定义方式: 基于OSGI
#通信方式:nio,采用mina框架
#序列化和反序列化: Hessian
技术调研选取考量原则:
1 是否开源;
2 功能是否强大,满足需求;
3 版本更新是否比较活跃,文档是否丰富;
目前本人正在着手做RPC框架,基于mina的,以及高性能分布式服务框架,有兴趣的童鞋一起讨论,ji ...
- 2013-09-02 22:41
- 浏览 704
- 评论(0)
1 创建契约
2 实现契约(真正的服务类)
3 选择寄宿方式
4 编写客户端调用代码
我写了一个控制台寄宿方式的WCF服务调用的例子,在这里下载:
点击打开链接
- 2013-09-01 22:07
- 浏览 324
- 评论(0)
一 应用无状态(淘宝session框架)
假如在session中保存了大量与客户端的状态信息,保存状态信息的server宕机时
通常通过集群解决,不仅有负载均衡,更重要的是要有失效恢复failover
tomcat用集群节点广播复制,jboss用配对复制等session状态复制策略,但严重影响系统的伸缩性,不能通过增加更多的机器达到良好的水平伸缩
因为集群节点间session通信随着节点的增多而开销增大,因此要想做到应用本身的伸缩性,要保证应用无状态,这样集群中的各个节点来说都是相同的,使系统更好的水平伸缩
- 2013-08-31 14:21
- 浏览 417
- 评论(0)
项目中需要使用一个定时器,按一定的时间间隔调用WCF服务从服务器端加载一些缓存到客户端。
C#中有三种定时器:
(1)Form中的那个;
(2)System.Threading中的那个;
(3)System.Timers中的那个;
我开始使用的是第二种,然后再定时器执行的回调函数中调用WCF服务,没想到导致我的定时器只能执行一次,此后便不再执行。
然后我换成第三种定时器,在其事件处理函数中调用WCF服务,就可以正确运行了。
至于原因,项目做完再研究吧。
================================== 慵懒的分割线 ================== ...
- 2013-08-30 00:17
- 浏览 546
- 评论(0)
Last Updated: Apr 03, 2013 08:46AM IDT
假如你已经写了太多次同样的config代码(译者注:应该是指NServiceBus的那些初始化代码),假如你想要将你的终结点寄宿(host)到windows服务中,那么NServiceBus.Host.exe能够为你做这些事情,并且作为控制 ...
- 2013-08-27 23:23
- 浏览 726
- 评论(0)
最近C#项目遇到一个问题,我编写了一个开机启动的服务,有两个目的:
(1)客户端运行时需要用到一些缓存,但是这些缓存的加载(从服务器端获取)有些耗时,所以就想要开启一个服务在客户端打开之前就开始获取这些缓 ...
- 2013-08-27 21:29
- 浏览 420
- 评论(0)
Last Updated: Apr 23, 2013 11:41AM IDT
怎么样通过Fiddler来调试RavenDB。
设置一个NServiceBus终结点的所有的对RavenDB的调用都通过fiddler,你需要做的是:为你的终结点配置代理,方法是通过增加下面的配置到app.config中。
<system.net>
<defaultProxy>
<proxyusesystemdefault="False"bypassonlocal="True"proxyaddress="http:// ...
- 2013-08-18 23:29
- 浏览 318
- 评论(0)