WebService中方法的重載

一:WebService中的方法是否允許重載?

                   WebService中不支持使用方法的重載,從圖片我們能夠得出結論

   [WebMethod]
   public string SayHello()
   {
        return "helow world !!";
   }
 
   [WebMethod]
   public string SayHello(string strValue)
   {
     return strValue;
   }

二:爲什麼WebService中不支持方法的重載?

    WebService中不支持方法的重載,這還得從WebService的工作機制中說起,當客戶端調用一個WebService的方法時,首先要將方法名稱和需要傳遞的參數包裝成XML,也就是SOAP包,通過HTTP協議傳遞到服務器端,然後服務器端解析這段XML,得到被調用的方法名稱和傳遞過來的參數,進而調用WebService相應的方法,方法執行完畢後,將返回結果再次包裝爲XML,也就是SOAP響應,發送到客戶端,最後客戶端解析這段XML,最終得到返回結果,關鍵在於服務器端解析XML時無法識別重載的方法,WebService只認方法的名稱,而且兩個方法的名稱相同,服務器端不知道該調用哪個相應的方法

三:如何解決WebService中方法的重載?

    可以通過MessageName屬性消除由於多個相同的名稱造成的Web服務無法識別的問題,因爲MessageName屬性使得Web服務能夠確定唯一別名的重載方法,默認時候是方法本身的名稱,當指定MessageName屬性後,SOAP將反映MessageName的值,而不是方法名稱本身,所以這就解決了WebService中不支持方法的重載

    [WebServiceBinding(ConformsTo = WsiProfiles.None)]
    [WebMethod(MessageName="s1")]
   public string SayHello()
   {
        return "helow world !!";
   }
 
   [WebMethod(MessageName="s2")]
   public string SayHello(string strValue)
   {
     return strValue;
   }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章