专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > WCF

WCF容易应用总结 by Jimmyzzc

发布时间:2011-06-23 13:51:50 文章来源:www.iduyao.cn 采编人员:星星草
WCF简单应用总结 by Jimmyzzc

在VS2013里建立一个最简单的WCF服务,基本流程如下:

一:新建WCF应用

二、WCF应用中的契约(Contract)

 1     [DataContract]
 2     public class 自定义属性
 3     {
 4         [DataMember]
 5         public System.Guid Id { get; set; }
 6         [DataMember]
 7         public string Key { get; set; }
 8         [DataMember]
 9         public string Value { get; set; }
10         [DataMember]
11         public int OrderId { get; set; }
12     }

以上是WCF的一个实体模型,如果class想要在引用WCF服务的其它程序里使用,则需要在类的上方加入[DataContract]关键字,并引用using System.Runtime.Serialization;命名空间。此处表示该类定义了契约。若类中的属性需要被其它程序调用,需要加上[DataMember]。

下面的实体类的声明方式有所不同,下面详细讲解。

 1 [DataContract(IsReference = true)]
 2     [KnownType(typeof(产品))]
 3     [KnownType(typeof(成品))]
 4     [KnownType(typeof(定制))]
 5     [KnownType(typeof(基础材料))]
 6     public class 商品
 7     {
 8         public 商品()
 9         {
10             this.单位值 = 0m;
11             this.商品自定义属性集 = new List<自定义属性>();
12             this.价格方案集 = new List<价格方案>();            
13         }
14         [DataMember]
15         public 产品 产品信息 { get; set; }
16         [DataMember]
17         public System.Guid Id { get; set; }
18         [DataMember]
19         public string 商品编号 { get; set; }
20         [DataMember]
21         public string 名称 { get; set; }
22         [DataMember]
23         public string 描述 { get; set; }
24         [DataMember]
25         public string 图片集 { get; set; }
26         [DataMember]
27         public virtual IEnumerable<价格方案> 价格方案集 { get; set; }
28         [DataMember]
29         public virtual IEnumerable<自定义属性> 商品自定义属性集 { get; set; }
30     }

[DataContract(IsReference = true)]这个关键字也是起到契约的作用,IsReference = true

是表示该类有导航属性(本项目的数据是用EF5.0开发,故有导航属性,何为导航属性请自行查阅EF相关知识),并与导航属性之间可以相互引用,如果不加此关键字,服务会报错(类似为死循环)。价格方案集、商品自定义属性集都是属性。[KnownType(typeof(定制))]代表类之间的继承关系,就是说定制类是继承于商品这个类的。如果不加此关键字,服务发布之后会在服务中看不到定制这个类型。

三、WCF应用中的服务功能实现(ServiceBehavior

首先在实现业务之前要定义好方法接口

1 public interface I同步供应商物料
2 {
3         Model.产品关系 Get同步_产品关系(Guid 产品关系Id);
4         List<Guid> Get待同步_全部产品关系Id集(int 页号, int 页数, out int 记录数, string 供应商编号, DateTime 最后更新时间);
5 }

此处应该注意,如果返回的对象为泛型。要用List<>来声明,不能用IEnumerable<>,因为本人在调试过程中最开始用的是IEnumerable<>,结果程序不断的报错,困扰了一天最后无处可改的时候改成了List<>结果就好了。后来查资料好像是因为WCF中某些类型是不可以序列化的。

下面是实现接口的过程:

 1 [ServiceContract]
 2 public class 设计中心同步服务 : I同步供应商物料, I同步供应商指定时间物料
 3 {        
 4 [OperationContract]
 5         public List<Guid> Get待同步_全部产品Id集(int 页号, int 页数, out int 记录数, string 供应商编号, DateTime 最后更新时间)
 6         {
 7             using (var db商品 = new 商品.WCF外部服务())
 8             {
 9                 return db商品.Get待同步_全部产品Id集(页号, 页数, out  记录数, 供应商编号, 最后更新时间).ToList();
10             }
11         }
12         [OperationContract]
13         public Model.产品 Get同步_产品(Guid 产品Id)
14         {
15             using (var db商品 = new 商品.WCF外部服务())
16             {
17                 产品 model产品 = db商品.Get同步_产品(产品Id);
18                 return Fill同步产品(model产品);
19             }
20         }
21 }

[ServiceContract]为实现方法的类在引用时候可以调用,[OperationContract]是该类里的方法也可以在其它引用中调用。

三、WCF应用的配置文件以及发布

服务的配置文件都在webconfig这个文件下。系统会生成一些代码,但主要的是:

 1 <system.serviceModel>
 2     <bindings>
 3       <basicHttpBinding>
 4         <binding name="BasicHttpBinding_supplier" />
 5       </basicHttpBinding>
 6 </bindings>
 7     <client>
 8       <endpoint address="http://192.168.3.227:7788/设计中心同步服务.svc" binding="basicHttpBinding"
 9     bindingConfiguration="BasicHttpBinding_supplier" contract="六月版.供应商.WCF服务.外部服务.设计中心同步服务"
10     name="BasicHttpBinding_supplier" />
11 </client>
12 </system.serviceModel>

<basicHttpBinding>定义了服务的发布绑定方式,有很多种。目前讨论两种BasicHttpBinding和WsHttpBinding。WsHttpBinding支持WS- Security specifications,WS-Security specifications具有扩展web service的能力。两者之间最大的不同那就是安全。默认情况下,BasicHttpBinding发送的是明文数据,而 WsHttpBinding发送的是加密和更加安全的数据。如果你希望有向后兼容的能力,并且支持更多的客户端,你可以选择basicHttpBinding,如果你确定你的客户端使用的是.NET 3.0甚至更高的话,你可以选择wsHttpBinding。

<endpoint>是终节点的意思。包括发布后的服务地址和行为,行为绑定的名称就是发布绑定的名称。都配置完成后,VS中按着一步步提示发布即可。

其它程序可以通过终节点配置的IIS地址来添加服务引用,就可以用到封装好的WCF服务了。

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: