web 在 WebService 中發布一個方法很簡單,只要將你要發布的方法用 System.Web.Services.WebMethodAttribute 屬性類來標識出就可以了,但是該屬性只能應用於方法而不能應用到屬性。該類的MSDN文檔可以見到(C#):
[AttributeUsage(AttributeTargets.Method)]
public sealed class WebMethodAttribute : Attribute
那麼,如果我們需要將一個屬性也發布成一個Web方法,該如何做呢?在討論這個問題之前,先來看看為什麼我們需要發布屬性為一個Web方法?因為有人可能會這麼告訴你,你可以把你的屬性改寫成兩個對應的getXXXXX/setXXXXX方法來分別發布成WebMethod。哦,是的,這麼做看似可以達到目的,但是這樣做損害了我們的介面定義,使得我們無法享受屬性為我們所帶來的快樂(請不要問我是什麼快樂),其實最重要的一個原因就是無法完成對介面的實現了,此話怎講?且看下面代碼(C#):
public interface IDataService
{
// 該屬性指示當前使用的是什麼資料庫系統(例如:MS-SQLServer、Orcale、IBM-DB2 等等)
int DataProvider
{
get;
}
[System.Web.Services.Protocols.SoapDocumentMethodAttribute(... ...)]
[return: System.Xml.Serialization.XmlElementAttribute("GetDataProviderResult")]
public int GetDataProvider()
{
object[] results = this.Invoke("GetDataProvider", new object[0]);
return (int)results[0];
}
那麼,你只需將該方法的主體部分大概改成這個樣子即可:
public int GetDataProvider
{
[System.Web.Services.Protocols.SoapDocumentMethodAttribute(... ...)]
[return: System.Xml.Serialization.XmlElementAttribute("GetDataProviderResult")]
get
{
object[] results = this.Invoke("GetDataProvider", new object[0]);
return (int)results[0];
}
}