成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.asmx處理程序提供的功能之消息調(diào)度

開發(fā) 后端
本文介紹了.asmx處理程序提供的功能之消息調(diào)度。在默認(rèn)情況下,.asmx 處理程序使用 SOAPAction 頭的值來執(zhí)行消息調(diào)度。

當(dāng) .asmx處理程序由 HTTP 管道調(diào)用之后,它會通過查看在 .asmx 文件中發(fā)現(xiàn)的 WebService 聲明來確定要檢查哪個 .NET 類。然后,它會查看傳入的 HTTP 消息中的信息,以便正確地確定要在被引用類中調(diào)用哪種方法。要調(diào)用先前示例中顯示的 Add 操作,傳入的 HTTP 消息必須具有如下所示的外觀:

  1. POST /math/math.asmx HTTP/1.1   
  2. Host: localhost   
  3. Content-Type: text/xml; charset=utf-8   
  4. Content-Length: length   
  5. SOAPAction: "http://tempuri.org/Add"   
  6. < soap:Envelope    
  7. xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"   
  8. >   
  9. < soap:Body>   
  10. < Add xmlns="http://tempuri.org/">   
  11. < x>33< /x>   
  12. < y>66< /y>   
  13. < /Add>   
  14. < /soap:Body>   
  15. < /soap:Envelope>   

在傳入的 HTTP 消息中,確實(shí)有兩段信息可用來確定要在該類中調(diào)用哪種方法:SOAPAction 頭或請求元素的名稱(例如,soap:Body 元素中元素的名稱)。在本例中,任何一個都指出了發(fā)送方想調(diào)用的方法的名稱。

在默認(rèn)情況下,.asmx 處理程序使用 SOAPAction 頭的值來執(zhí)行消息調(diào)度。因此,.asmx 處理程序查看消息中的 SOAPAction 頭,使用 .NET 反射檢查被引用類中的方法。它只考慮標(biāo)記了 [WebMethod] 屬性的方法,但是它可以通過查看每種方法的 SOAPAction 值來正確地確定要調(diào)用哪種方法。由于我們沒有對類中的方法顯式指定 SOAPAction 值,因此,.asmx 處理程序假設(shè) SOAPAction 值將由 Web 服務(wù)的命名空間及其后面的方法名稱組成。而且我們也沒有指定命名空間,因此該處理程序會將 http://tempuri.org 作為默認(rèn)的命名空間。這樣,Add 方法的默認(rèn) SOAPAction 值將是 http://tempuri.org/Add

您可以自定義 Web 服務(wù)的命名空間,方法是用 [SoapDocumentMethod] 屬性批注自己的 WebMethod,從而使用 [WebService] 屬性以及正確的 SOAPAction 值來批注自己的類,如下所示:

  1. using System.Web.Services;   
  2. using System.Web.Services.Protocols;   
  3. [WebService(Namespace="http://example.org/math")]   
  4. public class MathService   
  5. {   
  6. [WebMethod]   
  7. public double Add(double x, double y) {   
  8. return x + y;   
  9. }   
  10. [WebMethod]   
  11. [SoapDocumentMethod(Action="urn:math:subtract")]   
  12. public double Subtract(double x, double y) {   
  13. return x - y;   
  14. }   
  15. ...   
  16. }   

現(xiàn)在,.asmx 處理程序希望 Add 方法的 SOAPAction 值是 http://example.org/math/Add(使用默認(rèn)試探法),希望 Subtract 方法的 SOAPAction 值是 urn:math:subtract(因?yàn)槲覀儗⑺@式定義為該值)。例如,下面的 HTTP 請求消息調(diào)用 Subtract 操作:

  1. POST /math/math.asmx HTTP/1.1   
  2. Host: localhost   
  3. Content-Type: text/xml; charset=utf-8   
  4. Content-Length: length   
  5. SOAPAction: "urn:math:subtract"   
  6. < soap:Envelope    
  7. xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"   
  8. >   
  9. < soap:Body>   
  10. < Subtract xmlns="http://example.org/math">   
  11. < x>33< /x>   
  12. < y>66< /y>   
  13. < /Subtract>   
  14. < /soap:Body>   
  15. < /soap:Envelope>   

如果 .asmx處理程序未找到與傳入的 HTTP 消息相匹配的 SOAPAction,則它只是引發(fā)一個異常(以后會詳細(xì)介紹如何處理異常)。如果您不想依賴 SOAPAction 頭來進(jìn)行方法調(diào)度,則可以用 [SoapDocumentService] 屬性的 RoutingStyle 屬性來批注該類,以便指示 .asmx 處理程序使用請求元素的名稱。如果這樣做的話,可能還應(yīng)該指出 WebMethod 不需要 SOAPAction 值(通過將它們的值設(shè)置為空字符串),如下所示:

  1. using System.Web.Services;   
  2. using System.Web.Services.Protocols;   
  3. [WebService(Namespace="http://example.org/math")]   
  4. [SoapDocumentService(   
  5. RoutingStyle=SoapServiceRoutingStyle.RequestElement)]   
  6. public class MathService   
  7. {   
  8. [WebMethod]   
  9. [SoapDocumentMethod(Action="")]   
  10. public double Add(double x, double y) {   
  11. return x + y;   
  12. }   
  13. [WebMethod]   
  14. [SoapDocumentMethod(Action="")]   
  15. public double Subtract(double x, double y) {   
  16. return x - y;   
  17. }   
  18. ...   
  19. }   

在本例中,該處理程序甚至不查看 SOAPAction 值,而是使用請求元素的名稱。例如,對于 Add 方法,該處理程序希望請求元素的名稱是 Add(來自 http://example.org/math 命名空間),如下面的 HTTP 請求消息中所示:

  1. POST /math/math.asmx HTTP/1.1   
  2. Host: localhost   
  3. Content-Type: text/xml; charset=utf-8   
  4. Content-Length: length   
  5. SOAPAction: ""   
  6. < soap:Envelope    
  7. xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"   
  8. >   
  9. < soap:Body>   
  10. < Add xmlns="http://example.org/math">   
  11. < x>33< /x>   
  12. < y>66< /y>   
  13. < /Add>   
  14. < /soap:Body>   
  15. < /soap:Envelope>   

因此,當(dāng) .asmx處理程序收到傳入的 HTTP 消息時,它做的第一件重要事情就是確定如何將該消息調(diào)度到相應(yīng)的 WebMethod。但是,在能夠?qū)嶋H調(diào)用該方法之前,它必須將傳入的 XML 映射到 .NET 對象。

【編輯推薦】

  1. WebMethod框架:實(shí)現(xiàn)Web服務(wù)的更高效方法
  2. .NET框架基本要求(.NET1.1)
  3. P2PMessageQueue的實(shí)際用法
  4. 點(diǎn)對點(diǎn)消息隊(duì)列函數(shù):用于WinCE的IPC機(jī)制
  5. ASP.NET中無Cookie會話的優(yōu)點(diǎn)與缺點(diǎn)
責(zé)任編輯:yangsai 來源: MSDN
相關(guān)推薦

2009-08-06 18:23:51

XML映射XmlSerializ.asmx處理程序

2009-08-07 14:14:27

自動生成WSDL.asmx處理程序

2009-06-14 17:18:55

ibmdwWebSphereMQ

2013-11-12 23:32:53

微信公號微信公眾賬號

2011-06-23 15:32:05

Qt Windows消息

2009-06-19 15:20:08

Quartz任務(wù)調(diào)度Spring

2025-05-13 03:22:00

2009-08-19 15:54:33

處理C#消息

2011-03-07 11:12:36

FileZilla

2013-08-20 16:14:46

pythonpython文本處理

2020-02-18 13:05:44

Windows 10功能Windows

2009-06-17 16:56:46

Spring JMS

2022-07-01 17:14:03

消息通知鴻蒙

2011-01-21 10:59:01

sendmail群發(fā)

2023-04-26 15:36:51

WPA鴻蒙

2022-06-13 14:31:02

資源調(diào)度鴻蒙

2020-11-19 07:20:07

微軟Pluton處理器Windows PC

2012-05-15 09:31:11

Windows 8IE 10

2017-04-06 10:45:53

開源Cillium網(wǎng)絡(luò)

2014-05-22 14:57:28

Android消息處理機(jī)制Looper
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 天天看逼 | 国产欧美视频一区二区三区 | 欧美a∨ | 久久精品色欧美aⅴ一区二区 | 亚洲第一成人av | 99综合| 成人日韩 | 国产最新视频在线 | 久久福利电影 | 久久黄色网| 亚洲精品国产成人 | cao在线 | 99精品视频一区二区三区 | 久久专区 | 国产精品一区久久久 | 国产中文字幕亚洲 | 天天操天天操 | 国产成人精品在线播放 | 国产精品国色综合久久 | 精品免费国产一区二区三区四区 | 日本成人午夜影院 | 国产目拍亚洲精品99久久精品 | 欧美久久久久久 | 亚洲精品欧美精品 | 伊人啪啪网| 国产精品免费观看 | 成人在线视频一区二区三区 | av黄色在线 | 国产高清免费视频 | av大全在线观看 | 91国产视频在线 | 精品国产欧美一区二区 | 日韩精品成人一区二区三区视频 | 精品欧美一区二区三区久久久 | 日操操| 久草网址 | 国产91丝袜在线熟 | 亚洲国产成人精品女人久久久野战 | 荷兰欧美一级毛片 | 久久久久久色 | 五月激情综合 |