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;
}