概述
代码中的所有例子都可在hi.csdn.net/heroyuchao中下载
首先我们得明确一点那就是网络上传送数据报是不可靠的,丢报现象时有发生,因此在WCF中对数据报传送的可靠性有特别的配制。实现可靠性的传输在WCF中是非常简单的,我们只需要在配制文件中作一些配制就行如下:
MSMQ微软消息队列能实现一种脱机调用,因为客户端能够将信息发送到消息队列中,服务端在有空的时候再去读取消息队列中的信息,也就是说客户端的信息不必让服务端即时的处理。那么我们现在就看看在WCF中如何使用MSMQ的。还记得上一篇中的下订单的例子吗?我们继续使用这个例子,不过我要做一个小小的改动,上一篇的这个例子中,客户端调用PushOrder方法后,服务端就要马上处理把OrderID输出到控制台上。这篇中服务端不会马上处理,因为客户端可以在服务没有启动的时候调用PushOrder。只有服务在启动完才会把OrderID输出。由于我用的系统是XP,而XP默认是没有安装MSMQ的,所以我们可以在“添加删除程序中安装”方法与安装IIS是一样的。安装完成后我们在计算机管理找到消息队列。
安装一个专用队列如下所示:
前面的private$表示这个是专用队列,这里我们创建一个myprivatequeue队列并在事务性那打个勾,因为这样我们就能保证发送信息与接收信息的顺序是一样的,完成这个工作后我们再来看看服务端的代码:
代码与上一篇中基本上是一样的,唯一不同点是我们的pushorder方法上多了个IsOneWay=true,在默认情况下IsOneWay是为false的,也就是说默认情况下是双工通信,为什么我们在这里将它设为true呢?设为true后双工就变成单向了,因为客户端在调用方法时服务端是可以没有启用的,如果是双向通信,客户端在服务端没有启动时调用方法会抛出异常,但是设为true后我们就是告诉程序,我们不需求要知道调用的结果,因此客户端就能正常调用没有启动的服务器方法了。下面我们再看看配制文件:
这个配制文件有点多但是不复杂,先看看第一个endpoint,由于我们要使用MSMQ,所以我们就只使用netMsmqBinding,所以address就变成了:
net.msmq://localhost/private/myprivatequeue,其中private表示是专有队列,myprivatequeue是队列的名字,localhost是本机,如果队列是其它计算机中的,只要把localhost改成装有队列的计算机IP或计算机名就行。那第二个endpoint与第三个endpoint的作用呢?我们知道服务端只有将contract暴露后客户端才能下载到,暴露元数据我们必须用mex系列的绑定,而mex是成队使用的如第二个endpoint中的wsHttpBinding与mexHttpBinding就是一对。而netMsmqBinding没有与它对应的mex绑定,所以我就加了后两个endpoint,这样客户端就能通过http下载到代理了。
再看看客户端的调用代码:
首先我们定义了一个回调接口ICallback,在接口中我定义了回调方法Notify,但是我们的服务部分并没有实现,因为这个方法的实现会在客户端完成。Service Contract中我们只有一个方法Login,这个方法会向服务端的控制台输出有新客户端登录的信息,同时调用调用登录后的所有以登录后的客户端回调方法,其中所以回调方法的调用通道都放到了list中。看看配制文件:
在这里我们使用了netTcpBinding,这有没有它的必有性呢,使用Tcp是很必要的,因为服务端要回调客户端方法就要求通道是双向通信的。
这个客户端代码:
我们先来看看“招行”的服务代码:
为了能使事务能传播,我们必须在配制文件中作一些配制:
最后
以上就是陶醉耳机为你收集整理的wcf学习高级篇的全部内容,希望文章能够帮你解决wcf学习高级篇所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复