1.wcf契約分為:服務契約,操作契約,消息契約、數據契約
-------------------服務契約:
[ServiceContract( Name = "name_IUser", Namespace = "http://localhost:3232/wpf/aa")]
配置元數據交換
?<endpoint address="mex" binding="mexHttpBinding"? contract="IMetadataExchange">
?</endpoint>//系統內置的數據元數據交換掉的協議;
?
-------------------操作契約:
[OperationContract(Name = "name_GetName", Action = "http://localhost:3232/wpf/aa/ServiceContract/GetName")]
參數重命名:
void SetName([MessageParameter(Name="")]string name);
返回值重命名
[return:MessageParameter(Name="")]
標記單工通信
[OperationContract(IsOneWay = true)]//默認為false;
-------------------數據契約:
-添加引用:using System.Runtime.Serialization;
[DataContract(Name = "name_DataUser", Namespace = "http://localhost:3232/wpf/aa")]
數據成員:
--數據契約序列化器案例:
?Person p = new Person();
??????????? p.Name = "郭澤峰";
??????????? DataContractSerializer ds = new DataContractSerializer(typeof(Person));
??????????? FileStream fs = new FileStream("cc.xml", FileMode.Create);
??????????? ds.WriteObject(fs, p);
??????????? fs.Close();
[DataMember(Name="name_Name",IsRequired=false,Order=0)]//IsRequired:約束是否必須,order:序列化時的順序;
為標記的不進行序列化;
1.wcf為了實現soa思想丟失了面向對象的許多特性,比如多態,為了繼續使用多態,添加了knowtype(已知類型),在服務中暴露基本類型。標記為派生類并參與序列化;標記后就可以進行里氏替換了;否則轉換會剖出異常;
2.在接口上標記已知類型:[serviceKnowType(typeOf())],這樣接口里的所有方法聲明都可以進行里氏替換;
3.只針對接口中某些特定方法定義的話,加到特定方法聲明上就可以了;
-------------------消息契約:為了可以自定義soap格式;header和body;
[MessageContract(IsWrapped=true,ProtectionLevel=ProtectionLevel.Sign)]//消息契約
[messageHeader(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
[messageBodyMember]
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
