久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

數(shù)據(jù)契約(DataContract)

 復(fù)雜網(wǎng)絡(luò)621 2015-03-26

服務(wù)契約定義了遠(yuǎn)程訪問(wèn)對(duì)象和可供調(diào)用的方法,,數(shù)據(jù)契約則是服務(wù)端和客戶端之間要傳送的自定義數(shù)據(jù)類型。

一旦聲明一個(gè)類型為DataContract,,那么該類型就可以被序列化在服務(wù)端和客戶端之間傳送,,如下所示。

      [DataContract]

     public class UserInfo

     {

          //….

}

只有聲明為DataContract的類型的對(duì)象可以被傳送,,且只有成員屬性會(huì)被傳遞,成員方法不會(huì)被傳遞,。WCF對(duì)聲明為DataContract的類型提供更加細(xì)節(jié)的控制,,可以把一個(gè)成員排除在序列化范圍以外,也就是說(shuō),,客戶端程序不會(huì)獲得被排除在外的成員的任何信息,,包括定義和數(shù)據(jù)。默認(rèn)情況下,,所有的成員屬性都被排除在外,,因此需要把每一個(gè)要傳送的成員聲明為DataMember,,如下所示。

    [DataContract]

    public class UserInfo

    {

        [DataMember]

        public string UserName

        {

            get;

            set;

        }

        [DataMember]

        public int Age

        {

            get;

            set;

        }

        [DataMember]

        public string Location

        {

            get;

            set;

        }

        public string Zodiac

        {

            get;

            set;

        }

}

上面這段代碼把UserInfo類聲明為DataContract,,將UserName,、Age、Location這3個(gè)屬性聲明為DataMember(數(shù)據(jù)成員)。Zodiac成員沒(méi)有被聲明為DataMember,因此在交換數(shù)據(jù)時(shí),,不會(huì)傳輸Zodiac的任何信息,。

DataContract也支持Name/Namespace屬性,,如同ServiceContract,Name和Namespace可以自定義名稱和命名空間,客戶端將使用自定義的名稱和命名空間對(duì)DataContract類型進(jìn)行訪問(wèn)。

聲明為DataMember的成員也可以自定義客戶端可見(jiàn)的名稱,,例如:

[DataMember(Name="Name")]

public string UserName

{

     get;

     set;

}

[DataMember(Name="Age")]

public int UserAge

{

          get;

          set;

}

除了Name和Namespace以外,DataMember還有以下參數(shù),,它們的含義分別如下,。

(1)IsRequired:值為true時(shí),,要求序列化引擎檢查對(duì)象是否存在該值;若無(wú),,則會(huì)有異常拋出。

(2)Order:bool類型值,,值為true時(shí),,序列化和反序列化過(guò)程將會(huì)按成員定義的順序進(jìn)行,這對(duì)依賴于成員位置的反序列化過(guò)程無(wú)比重要,。

(3)EmitDefaultvalue:為成員屬性設(shè)置一個(gè)默認(rèn)值,。

一般情況下,將類型聲明為DataContract就可以滿足傳送的需求了,,不過(guò)特殊情況是難以避免的,,這時(shí)就需要對(duì)要傳送的SOAP消息進(jìn)行更加精確的控制,MessageContract可以滿足這種需求,。

把一個(gè)類型聲明為MessageContract,,意味著它可以被序列化為SOAP消息,可以聲明類型的成員為SOAP消息的各個(gè)部分,,如Header,、Body等,如下所示,。

    [MessageContract]

    public class UserMessage

    {

        private string user = String.Empty;

        private string authKey = String.Empty;

        [MessageBodyMember(

          Name = "UserName",

          Namespace = "http://www.")]

        public string User

        {

            get { return user; }

            set { user = value; }

        }

        [MessageHeader(

          Name = "AuthKey",

          Namespace = "http://www.",

          MustUnderstand = true

        )]

        public string AuthKey

        {

            get { return authKey; }

            set { this.authKey = value; }

        }

}

User成員被聲明為MessageBody(消息體)的一個(gè)成員,,AuthKey被聲明為消息頭(MessageHeader)的一個(gè)成員。這個(gè)類將可以生成如下的SOAP消息,。

<s:Envelope>

    <s:Header>

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

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

    </s:Header>

    <s:Body>

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

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

       </UserMessage>

    </s:Body>   

</s:Envelope>


MessageHeader中,,MustUnderstand參數(shù)表示讀取該頭的程序必須能夠識(shí)別頭的內(nèi)容,否則不能繼續(xù)處理,。Name/Namespace的作用與前面的元素相同,。另有Relay參數(shù),若為true,,頭的內(nèi)容被接收到以后會(huì)在響應(yīng)消息中回發(fā)給消息發(fā)送端,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多