首页 > 开发 > 综合 > 正文

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

2024-07-21 02:21:26
字体:
来源:转载
供稿:网友
由于web service的执行身份受限,所以我们无法直接让web service申请作为一个soapreceiver,而是通过下面的web.config定义来制定本虚拟目录的.ashx终结点,从而通过ws_addressing和ws_messaging机制来完成与后台侦听服务之间的订阅/发布机制。 
<configuration> 
<configsections> 
    <section name="microsoft.web.services" 
      type="microsoft.web.services.configuration.webservicesconfiguration, 
      microsoft.web.services, version=2.0.0.0, culture=neutral, 
      publickeytoken=31bf3856ad364e35" /> 
  </configsections> 
原理介绍: 
除了进程内与 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 类型: 
<system.web> 
<httphandlers> 
        <!-- 为了让我们的webservice能够接收到来自于后台侦听服务的soap消息 
             我们让webservice继承自soapreceiver,并实现了void receive(soapenvelope envelope), 
             这样dll通过向 
             new uri("http://"+ system.net.dns.gethostname() + "/myservice/getreceiver.ashx") 
             发送soap消息,那么soapreceiver的receive回调函数将被调用 
        --> 
      <add type="mywebservice.myinterface" path="getreceiver.ashx" verb="*" /> 
</httphandlers> 
把这组代码放到适当的位置,将针对每条输入此虚拟目录并指向 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 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表