[WSE]Web Service—後台偵聽服務通過WSE2.0建立訂閱/發布關係

來源:互聯網
上載者:User
web|後台 由於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 

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。