服務契約servicecontract特性能夠把介面或者類公開為面向服務的契約,允許開發者使用c#語言進行程式設計把類似於介面這樣的語法結構公開為wcf契約和服務。
//指示介面或類在應用程式中定義服務協定。
// 摘要:指示介面或類在 應用程式中定義服務協定。
[attributeusage(attributetargets.class | attributetargets.inte***ce, inherited = false, allowmultiple = false)]
public sealed class servicecontractattribute : attribute
// 摘要:獲取或設定用於查詢應用程式配置檔案中的服務的名稱。
// 返回結果:用於查詢應用程式配置檔案中的服務元素的名稱。預設值是服務實現類的名稱。
// 異常:system.argumentnullexception:該值為 null。system.argumentoutofrangeexception:該值是乙個空字串。
public string configurationname
// 摘要:取乙個值,該值指示是否對成員分配保護級別。
// 返回結果:如果 system.servicemodel.servicecontractattribute.protectionlevel 屬性不是 system.net.security.protectionlevel.none,則為true;否則為 false。預設值為 false。
public bool hasprotectionlevel
// 摘要:獲取或設定 web 服務描述語言 (wsdl) 中的 元素的名稱。
// 返回結果:預設值為應用了 system.servicemodel.servicecontractattribute 的類或介面的名稱。
// 異常:system.argumentnullexception:該值為 null。system.argumentoutofrangeexception:該值是乙個空字串。
public string name
// 摘要:獲取或設定 web 服務描述語言 (wsdl) 中的 元素的命名空間。
// 返回結果:元素的 wsdl 命名空間。預設值為「
public string namespace
// 摘要:指定協定的繫結是否必須支援 system.servicemodel.servicecontractattribute.protectionlevel屬性的值。
// 返回結果:system.net.security.protectionlevel 值之一。預設值為 system.net.security.protectionlevel.none。
// 異常:system.argumentoutofrangeexception:該值不是 system.net.security.protectionlevel 值之一。
public protectionlevel protectionlevel
// 摘要:獲取或設定是否允許、不允許或要求會話。
// 返回結果:指示是否允許、不允許或要求會話的 system.servicemodel.sessionmode。
// 異常:system.argumentoutofrangeexception:該值不是 system.servicemodel.sessionmode 值之一。
public sessionmode sessionmode
}一、方法過載
具有相同名稱的方法定義不同的引數或者返回值即為方法的過載。wcf中方法的過載是通過operationcontract特性的name 屬性,為操作指定別名實現的。
//指示方法定義乙個操作,該操作是 應用程式中服務協定的一部分。
// 摘要:指示方法定義乙個操作,該操作是 應用程式中服務協定的一部分。
[attributeusage(attributetargets.method)]
public sealed class operationcontractattribute : attribute
// 摘要:指示操作是使用服務協定中的 begin和 end方法對非同步實現的。
// 返回結果:如果 begin方法與 end方法匹配,並且基礎結構可將其視為服務介面上作為非同步方法對實現的操作,則為true;否則為 false。預設值為 false。
public bool asyncpattern
// 摘要:獲取乙個值,該值指示是否必須對此操作的訊息進行加密和/或簽名。
// 返回結果:如果 system.servicemodel.operationcontractattribute.protectionlevel 屬性設定為除system.net.security.protectionlevel.none 以外的任何值,則為 true;否則為 false。預設值為 false。
public bool hasprotectionlevel
// 摘要:獲取或設定乙個值,該值指示方法是否實現可在伺服器上啟動會話(如果存在會話)的操作。
// 返回結果:如果允許操作啟動伺服器上的會話,則為 true;否則為 false。預設值為 true。
public bool isinitiating
// 摘要:獲取或設定乙個值,該值指示操作是否返回答覆訊息。
// 返回結果:如果此方法收到請求訊息,但未返回任何答覆訊息,則為 true;否則為 false。預設值為 false。
public bool isoneway
// 摘要:獲取或設定乙個值,該值指示服務操作在傳送答覆訊息(如果存在)後,是否會導致伺服器關閉會話。
// 返回結果:如果該操作會導致伺服器關閉會話,則為 true;否則為 false。預設值為 false。
public bool isterminating
// 摘要:獲取或設定操作的名稱。
// 返回結果:操作的名稱。
// 異常:system.argumentnullexception:system.servicemodel.operationcontractattribute.name 為 null。system.argumentoutofrangeexception:該值是乙個空字串。
public string name
// 摘要:獲取或設定乙個值,該值指定是否必須對操作的訊息進行加密和/或簽名。
// 返回結果:system.net.security.protectionlevel 值之一。預設值為 system.net.security.protectionlevel.none。
// 異常:system.argumentoutofrangeexception:該值不是 system.net.security.protectionlevel 值之一。
public protectionlevel protectionlevel
// 摘要:獲取或設定用於該操作答覆訊息的 soap 操作的值。
// 返回結果:用於答覆訊息的 soap 操作的值。
// 異常:system.argumentnullexception:system.servicemodel.operationcontractattribute.replyaction 為 null。
public string replyaction
}例如:
[servicecontract]
inte***ce icalculator
二、契約繼承
服務契約介面支援繼承,servicecontract特性(inherited = false)卻是不能繼承的。
例如:[servicecontract]
inte***ce i******calculator
[servicecontract]
inte***ce iscientificcalculator : i******calculator
當客戶端匯入乙個服務終結點的元資料時,如果該終結點的契約屬於介面層級的一部分,則生成的客戶端契約將不再維持原來的層級關係。相反,它會取消層級,組成乙個單獨的契約,名稱為終結點的契約名。這個單獨的契約包含了層級中從上至下所有介面定義的操作。
[servicecontract]
public inte***ce iscientificcalculator
然而,如果使用operationcontract特性中的action 與replyaction屬性,那麼匯入的介面定義仍然可以保留原來定義每個操作的契約名。
WCF 第二章 契約 服務契約
服務契約描述了由服務終結點實現的介面操作。服務契約引用訊息格式並描述它們是怎麼被交換的。訊息格式更進一步被資料契約和訊息契約描述。這一部分主要涉及由服務契約實現的訊息交換。wcf在設計時和執行時使用服務契約。在設計階段,它們確定應該在wsdl理暴露為終結點的 的類。乙個使用 servicecontr...
WCF中的資料契約和服務契約
1 服務契約定義了遠端訪問物件和可供呼叫的方法 servicecontract特性允許應用到介面或類上。當介面應用了servicecontract特性後,需要定義類實現該介面 然後使用乙個或多個類 或介面 方法中的 operationcontract 屬性定義協定的服務操作 通俗的說,給乙個類或者是...
WCF 定義服務契約詳細步驟
wcf windows communication foundation 是一系列支援資料通訊的應用程式框架。定義服務契約步驟 1 新建類庫,並引入程式集的system.servicemodel 2 建立介面,定義服務契約,操作 using system using system.collectio...