日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据契约(DataContract)

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据契约(DataContract) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WCF第一要素就是契約:

服務契約用于聲明可用于遠程訪問的類型。在Interfaceclass開始處使用服務契約標簽.

[ServiceContract]

Public interface Iservice

{

?

}

接口調用契約的好處:

1.?????? 同一服務類型可以實現多個不相干的服務契約.

2.?????? 有利于版本升級

3.?????? 按照接口隔離原則,讓開發人員可以隨時修改服務契約.

服務契約的屬性與作用:

Name/Namespace定義該服務契約的自定義名稱和命名空間,它會反映到WSDL及客戶端的導出類中

ConfigurationName設置信息在配置文件中的名稱。默認情況下為類的全名(本例為“WCFDemo.IService”)。

SessionMode服務契約的會話方式,允許的值有AllowedNotAllowedRequired。默認為Allowed值。

CallbackContract設置雙工通信時(Duplex)的回調類型。

ProtectionLevel指定消息保護模式,可以對通信的消息進行加密及簽名。

使用參數時,例如要指定自定義的Name Namespace,可以編寫如下的代碼。

[ServiceContract(Name=”MyService”,Namespace=”http://microsoft.com/wcf/demo”)]

Interface IService{}

定義為服務契約的接口或類的方法可以被聲明為OperationContract(操作契約),只有聲明為操 作契約的方法才可以被遠程調用

[ServiceContract]

Public interface Iservice

{

?????? [OperationContract]

?????? String SayHello(string name);

}

?

錯誤契約(FaultContract)

被標識為FaultContract的方法必須同時已經被聲明為OperationContract,否則就沒有什么意義。聲明一個方法為 FaultContract并指定了響應的類型參數以后,當調用這個方法時產生錯誤時,就會有一個對應SOAP格式的錯誤消息返回給調用端

[DataContract]

public class UserFault //自定義錯誤類

{

??????? [DataMember]

??????? public string Message { get; set; }

??????? [DataMember]

??????? public int UserId { get; set; }

??????? public UserFault(int userId, string msg)

??????? {

??????????? this.UserId = userId;

??????????? this.Message = msg;

??????? }

}

? [ServiceContract]

? public interface IUserService

? {

??????? [OperationContract]

??????? [FaultContract(typeof(UserFault))]

??????? UserInfo GetUser(int id);

? }

? public UserInfo GetUser(int id)

? {

???? try{

??????????? UserInfo info = new UserInfo();

??????????? info.Age = 16;

??????????? info.UserName = "陳翔";

??????????? return info;

??????? }

??????? catch (Exception e)

??????? {

??????????? throw new FaultException<UserFault>(new UserFault(id, e.Message));

??????? }

? }

?

數據契約(DataContract)

[DataContract]

?????? public partial class Userinfo

?????? {????

????????????? private string _xsid = String.Empty;

?????????????

????????????? /// <summary>

????????????? /// 學生編號

????????????? /// </summary>

????????????? [DataMember(Name="xsid")]

????????????? public string Xsid

????????????? {

???????????????????? get { return _xsid; }

???????????????????? set { _xsid = value; }

????????????? }

?????? }

服務契約定義了遠程訪問對象和可供調用的方法,數據契約則是服務端和客戶端之間要傳送的自定義數據類型。

一個類如果聲明了DataContract類型,說明類是可以被傳送的,且只有成員屬性可以被傳送.支持Name/Namespace屬性[DataContract(Name=”Name”)]

每一個要傳送的成員聲明為DataMember類型,同樣也可以包含Name,Namespace,IsRequired,Order,EmitDefaultvalue屬性

需要傳送SOAP消息時可以使用[MessageContract] eg:

[MessageContract]

?????? public partial class Userinfo

?????? {????

????????????? private string _xsid = String.Empty;

????????????? private string _njid = String.Empty;

????????????? /// <summary>

????????????? /// 學生編號

????????????? /// </summary>

????????????? [MessageBodyMember(

Name="xsid"

Namespace=”http://www.smodi.com”)]

????????????? public string Xsid

????????????? {

???????????????????? get { return _xsid; }

???????????????????? set { _xsid = value; }

????????????? }

?????????????

????????????? /// <summary>

????????????? /// 年級編號

????????????? /// </summary>

????????????? [MessageHeader(

Name="njid"

Namespace=”http://www.smodi.com”)]

????????????? public string Njid

????????????? {

???????????????????? get { return _njid; }

???????????????????? set { _njid = value; }

????????????? }

?????? }

這個可以生成SOAP消息

<s:Envelope>

??? <s:Header>

??????? <a:Action s:mustUnderstand="1">http:// Userinfo /Action</a:Action>

??? ????<h:AuthKey s:mustUnderstand="1" xmlns:h="http://www.smodi.com">xxxx</h:AuthKey>

??? </s:Header>

??? <s:Body>

??????? <UserMessage xmlns="Microsoft.WCF.Documentation">

??? ?????????<User xmlns="http://www.smodi.com">abcd</User>

?????? </UserMessage>

??? </s:Body>???

</s:Envelope>

?

轉載于:https://www.cnblogs.com/chenqingwei/archive/2010/06/09/1754513.html

總結

以上是生活随笔為你收集整理的数据契约(DataContract)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。