//系统内置的" />

wcf契约随记

系统 1660 0

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]

 

 

 

wcf契约随记


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论