国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

[WSE]Web Service—后臺偵聽服務(wù)通過WSE2.0建立訂閱/發(fā)布關(guān)系

2024-07-21 02:21:26
字體:
供稿:網(wǎng)友
由于web service的執(zhí)行身份受限,所以我們無法直接讓web service申請作為一個soapreceiver,而是通過下面的web.config定義來制定本虛擬目錄的.ashx終結(jié)點,從而通過ws_addressing和ws_messaging機制來完成與后臺偵聽服務(wù)之間的訂閱/發(fā)布機制。 
<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> 
原理介紹: 
除了進程內(nèi)與 tcp 通訊機制,還可以在 asp.net 中將 soapreceivers 與 http 管道進行集成。如果查看一下 soapreceiver 的定義,您會注意到它實現(xiàn)了 ihttphandler: 
public abstract class soapreceiver : soapport, ihttphandler 

   。。。 

由于這一點,任何 soapreceiver 或 sendservice 類現(xiàn)在都能夠在 asp.net 中配置為 http 處理程序。通過在 web.config 文件的 httphandlers 部分添加一個新的映射,用戶能夠配置 http 處理程序。web.config 項將把 verb/path 組合映射到 soapreceiver 類型: 
<system.web> 
<httphandlers> 
        <!-- 為了讓我們的webservice能夠接收到來自于后臺偵聽服務(wù)的soap消息 
             我們讓webservice繼承自soapreceiver,并實現(xiàn)了void receive(soapenvelope envelope), 
             這樣dll通過向 
             new uri("http://"+ system.net.dns.gethostname() + "/myservice/getreceiver.ashx") 
             發(fā)送soap消息,那么soapreceiver的receive回調(diào)函數(shù)將被調(diào)用 
        --> 
      <add type="mywebservice.myinterface" path="getreceiver.ashx" verb="*" /> 
</httphandlers> 
把這組代碼放到適當(dāng)?shù)奈恢茫瑢⑨槍γ織l輸入此虛擬目錄并指向 getreceiver.ashx 的消息而調(diào)用 myservice。現(xiàn)在我們不必擔(dān)心通過調(diào)用 soapreceiver.add 來配置 soapreceiver/soapservice,因為 asp.net 本質(zhì)上代替您完成了此任務(wù)。 
如果更新客戶端以把消息發(fā)送到 http 終結(jié)點 (http://localhost/myservice/getreceiver.ashx),它會與使用 tcp 的工作方式相同,只是現(xiàn)在它通過 http 進行通訊。 
web service—后臺偵聽服務(wù)訂閱關(guān)系
由于web service運行的身份是asp.net用戶,而soapreceiver.add方法對執(zhí)行權(quán)限要求較高,所以我們采用http終結(jié)點的方式,再加上幾個靜態(tài)的哈希表,從而完成了與后臺偵聽服務(wù)之間的異步交互,以及與客戶端調(diào)用者之間的異步交互。 
下面我們具體講解一下: 
首先,調(diào)用者請求web serviced的beginxxx方法,這個方法再異步調(diào)用processxxx方法它負責(zé)組裝出一個soapenvelope,并向uri為 
soap.tcp://hostname:port/yourreceivername 
的目標(biāo)endpoint,用soapsender.send發(fā)送這個soapenvelope。一方面用于通知訂閱關(guān)系,另一方面?zhèn)鬟f了各項參數(shù),以及預(yù)先生成的guid。之后就將處理權(quán)返回調(diào)用者。 
這里包含了圖中的1,2,3三步: 
其次,正在監(jiān)聽的偵聽服務(wù)收到了消息,進行處理: 
添加這個訂閱者的各種信息到靜態(tài)哈希表; 
利用i/o完成端口異步執(zhí)行各種任務(wù); 
把結(jié)果集或者錯誤信息通過web service http終結(jié)點通知訂閱者。 
這里包含了圖中的4,5,6三步: 


最后,訂閱者web service收到通知后,通知客戶端調(diào)用者的回調(diào)函數(shù)來取回結(jié)果集,從而將結(jié)果集或者錯誤原因返回給客戶端。 


編寫者:鄭昀@ultrapower 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 犍为县| 定结县| 建始县| 北辰区| 安顺市| 湘潭县| 琼海市| 池州市| 仙游县| 新沂市| 东兰县| 南汇区| 乐安县| 宜兰县| 北宁市| 河东区| 台中县| 济宁市| 凌海市| 渝中区| 嵊泗县| 马山县| 华亭县| 怀远县| 长宁县| 呼和浩特市| 大化| 延寿县| 仁布县| 崇仁县| 枣庄市| 塔河县| 武川县| 汽车| 宽甸| 大宁县| 司法| 五家渠市| 九江市| 苍南县| 张家港市|