当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > [WSE]Web Service—后台侦听服务通过WSE2.0建立订阅/发布关系

ASP.NET
Asp.Net使用POST方法最简单的实现
实现.NET应用程序的自动更新
优秀ASP.NET程序员修炼之路
ASP.NET中实现模板页
在ASP.Net 2.0中实现多语言界面的方法
小议优化ASP.NET应用性能之Cache篇
.net开发投票机的思路
浅析CMS内容管理系统的两种方案
ASP.NET 2.0中动态修改页面标题
“您无权查看该网页”的原因和解决方法
将一个图片按比例缩放显示在一个Frame中
编程使用资源文件实现多语言页面(In Action)
.Net编程的多个小技巧
asp.net2.0学习历程-菜鸟到中级程序员的飞跃
asp.net如何连接sql server2000数据库
FCKeditor 2.6在ASP.NET中的配置方法
使用ASP.NET开发移动通讯的几种方法
ASP.NET 2.0的URL映射的实现方法
如何在Asp.net中使用HtmlArea编辑器
ASP.NET 2.0 中实现跨页提交

ASP.NET 中的 [WSE]Web Service—后台侦听服务通过WSE2.0建立订阅/发布关系


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 54 ::
收藏到网摘: n/a

编写者:郑昀@UltraPower 日期:2005-04-13


由于Web Service的执行身份受限,所以我们无法直接让Web Service申请作为一个SoapReceiver,而是通过下面的web.config定义来制定本虚拟目录的.ashx终结点,从而通过WS_Addressing和WS_Messaging机制来完成与后台侦听服务之间的订阅/发布机制。






type="Microsoft.Web.Services.Configuration.WebServicesConfiguration,

Microsoft.Web.Services, Version=2.0.0.0, Culture=neutral,

PublicKeyToken=31bf3856ad364e35" />



原理介绍:

除了进程内与 TCP 通讯机制,还可以在 ASP.NET 中将 SoapReceivers 与 HTTP 管道进行集成。如果查看一下 SoapReceiver 的定义,您会注意到它实现了 IhttpHandler:

public abstract class SoapReceiver : SoapPort, IHttpHandler

{

。。。

}

由于这一点,任何 SoapReceiver 或 SendService 类现在都能够在 ASP.NET 中配置为 HTTP 处理程序。通过在 web.config 文件的 httpHandlers 部分添加一个新的映射,用户能够配置 http 处理程序。web.config 项将把 verb/path 组合映射到 SoapReceiver 类型:












把这组代码放到适当的位置,将针对每条输入此虚拟目录并指向 GetReceiver.ashx 的消息而调用 MyService。现在我们不必担心通过调用 SoapReceiver.Add 来配置 SoapReceiver/SoapService,因为 ASP.NET 本质上代替您完成了此任务。

如果更新客户端以把消息发送到 HTTP 终结点 (http://localhost/MyService/GetReceiver.ashx),它会与使用 TCP 的工作方式相同,只是现在它通过 HTTP 进行通讯。

Web Service—后台侦听服务订阅关系由于Web Service运行的身份是ASP.NET用户,而SoapReceiver.Add方法对执行权限要求较高,所以我们采用HTTP终结点的方式,再加上几个静态的哈希表,从而完成了与后台侦听服务之间的异步交互,以及与客户端调用者之间的异步交互。

下面我们具体讲解一下:

首先,调用者请求Web Serviced的BeginXXX方法,这个方法再异步调用ProcessXXX方法它负责组装出一个SoapEnvelope,并向Uri为

soap.tcp://hostname:port/yourreceivername

的目标EndPoint,用SoapSender.Send发送这个SoapEnvelope。一方面用于通知订阅关系,另一方面传递了各项参数,以及预先生成的GUID。之后就将处理权返回调用者。

这里包含了图中的1,2,3三步:

其次,正在监听的侦听服务收到了消息,进行处理:

添加这个订阅者的各种信息到静态哈希表;

利用I/O完成端口异步执行各种任务;

把结果集或者错误信息通过Web Service HTTP终结点通知订阅者。

这里包含了图中的4,5,6三步:


最后,订阅者Web Service收到通知后,通知客户端调用者的回调函数来取回结果集,从而将结果集或者错误原因返回给客户端。


编写者:郑昀@UltraPower