六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

在 WebService 中使用屬性

[摘要]在 WebService 中發布一個方法很簡單,只要將你要發布的方法用 System.Web.Services.WebMethodAttribute 屬性類來標識出就可以了,但是該屬性只能應用于方法...
在 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;
}

// 該方法執行一段指定的SQL腳本,并返回其結果集
System.Data.DataSet Execute(String sqlText);

// 該方法將指定的數據集保存到數據庫中
void Update(System.Data.DataSet dataSet);
}

  現在我們寫一個 WebService 其需要實現 IDataService 接口,必須在該 WebService 中包含并發布該屬性。這時我們該怎么辦?呵呵,且看

public class DataService : System.Web.Services.WebSerbice, IDataService
{
...

public int DataProvider
{
[WebMethod(MessageName="GetDataProvider")]
get
{
...
}
}

[WebMethod()]
public System.Data.DataSet Execute(String sqlText)
{
...
}
}

  OK,大家看到了,將一個方法發布成Web方法是在其函數體前指定 WebMethod 屬性,而屬性則是在其get或set器之前指定 WebMethod 屬性,如果不指定屬性的 MessageName 屬性值,則發布的屬性的Web方法名將被置為get_XXXXX和set_XXXXX。

  在使用VS.net生成的 WebService 代理類(通過添加Web引用,Reference.cs)中的成員都是方法,因此需要手動修改代理類中的相關方法為屬性,例如上例的本地代理類的相關代碼看起來是這樣的:

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

通過以上步驟就可以在 WebService 中使用屬性了。呵呵,快樂又重新回來了!



后話:
  在開發過程中,你可能需要經常發布新的方法到你的 WebService 頁面中,客戶端程序也需要同步更新 WebService 以獲得最新的接口,當客戶端刷新 WebService 引用后你的代理類就會丟失你上面所作的修改。你可以維護一個客戶端代理類,并將這個代理類編譯到一個單獨的類庫中,而所有需要引用此 WebService 的客戶端就只需引用該類庫中的代理類了,這樣可以避免多個開發人員在每次更新 WebService 引用時的同步更改問題了,并且簡化了 WebService 的發布。當然,使用這種方式你需要認真考慮你的類庫版本以及命名空間的一些策略,這也是一件相當有趣并充滿藝術性的事情。
  另外,有關 WebService 頁面大小(包含方法個數)與性能的問題也需要我們給予足夠的關注,有關這方面的一個建議請參考我的這篇日志:http://blog.csdn.net/sw515/archive/2004/07/20/46349.aspx




主站蜘蛛池模板: 日韩一| 欧美午夜a级限制福利片 | 香蕉久久夜色精品国产尤物 | 日本不卡视频在线视频观看 | 深夜视频在线观看免费 | 诱惑网综合 | 日本视频中文字幕一区二区 | 色综合天天综合高清网国产 | 性生活视频欧美 | 亚洲欧美中日韩 | 亚洲欧美日韩精品永久在线 | 亚洲第一福利视频 | 色老头网站久久网 | 欧美一级淫片免费播放40分钟 | 亚洲欧美日韩中字综合 | 午夜激情视频专区在线观看网站大全 | 天天操天天射天天 | 日本大学生免费一级一片 | 午夜影院普通 | 在线观看污视频 | 青草视频免费观看在线观看 | 天天躁日日躁狠狠躁一级毛片 | 伊人久久五月 | 欧美一级高清片欧美国产欧美 | 青青青青草原国产免费 | 色爱区综合小说 | 日本精品在线播放 | 综合久久久久综合体桃花网 | 亚洲人成在线播放 | 五月婷婷六月婷婷 | 五月激激激综合网色播免费 | 欧美一级欧美一级高清 | 青青草视频免费在线观看 | 涩综合| 手机福利视频一区二区 | 欧美一区精品二区三区 | 午夜不卡视频 | 秋霞操| 欧美中文字幕在线 | 日韩a在线看免费观看视频 日韩a在线观看免费观看 | 四虎影院大全 |