閱讀目錄
一:WebService中的方法是否允許重載?
二:為什么WebService中不支持方法的重載?
三:如何解決WebService中方法的重載?
一:WebService中的方法是否允許重載?
WebService中不支持使用方法的重載,從圖片我們能夠得出結論
1 [WebMethod] 2 public string GetName() 3 { 4 return "從小就犯困"; 5 } 6 7 [WebMethod] 8 public string GetName(string strValue) 9 { 10 return strValue; 11 }
二:為什么WebService中不支持方法的重載?
WebService中不支持方法的重載,這還得從WebService的工作機制中說起,當客戶端調用一個WebService的方法時,首先要將方法名稱和需要傳遞的參數包裝成XML,也就是SOAP包,通過HTTP協議傳遞到服務器端,然后服務器端解析這段XML,得到被調用的方法名稱和傳遞過來的參數,進而調用WebService相應的方法,方法執行完畢后,將返回結果再次包裝為XML,也就是SOAP響應,發送到客戶端,最后客戶端解析這段XML,最終得到返回結果,關鍵在於服務器端解析XML時無法識別重載的方法,WebService只認方法的名稱,而且兩個方法的名稱相同,服務器端不知道該調用哪個相應的方法
三:如何解決WebService中方法的重載?
可以通過MessageName屬性消除由於多個相同的名稱造成的Web服務無法識別的問題,因為MessageName屬性使得Web服務能夠確定唯一別名的重載方法,默認時候是方法本身的名稱,當指定MessageName屬性后,SOAP將反映MessageName的值,而不是方法名稱本身,所以這就解決了WebService中不支持方法的重載
1 [WebServiceBinding(ConformsTo = WsiProfiles.None)] 2 [WebMethod(MessageName="FirstMethod")] 3 public string GetName() 4 { 5 return "從小就犯困"; 6 } 7 8 [WebMethod(MessageName="SecordMethod")] 9 public string GetName(string strValue) 10 { 11 return strValue; 12 }
我們現在來看這兩個方法的消息名稱是不就被區分開了