如何使用WCF服务实现分布式处理数据?
2014-03-13 10:11
856 查看
前面-我已经讲到如何 创建 Windows Service 服务 ,那么今天我将介绍如何创建WCF 服务(采用TCP通信)
一、创建一个WIndow Service 服务
具体步骤参考之前的文章 创建 Windows Service 服务?
二、 定义接口层
1) 创建一个 Window 类库
2) 创建一个接口类
注: 创建好类库后 右键 类库-->>添加引用 (Add Reference)-->>选项卡中选择.net -->>找到 System.ServiceModel-->>选中-->>确定。
创建一个接口类: ITestInterface.cs
编写好自己需要的方法 (接口中都是未实现的方法)
在接口上标注 [ServiceContract] (代表此接口及实现此接口的类都是对外发布的Service类)
在每个方法上标注 [OperationContract] (代表此 方法 外部可以访问到)
具体代码如下:
三、创建服务方法层 (相当于 项目中的BLL业务逻辑层)
1) 创建一个Window 类库
2) 创建 实现接口方法的类
注: 创建好类库后 右键 类库-->>添加引用 (Add Reference)-->>选项卡中选择.net -->>找到 System.ServiceModel-->>选中-->>确定。
右键 类库-->>添加引用 (Add Reference)-->>选项卡中选择Projects-->>找到 MyTest.Contracts-->>选中-->>确定。
创建一个类: Test.cs 并且继承 : ITestInterface 接口实现接口方法
在类上标注:[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
(此标签代表这个类采用SingleTone(单类模式)来生成 对象。)
四、配置 WCF
1) 添加一个 app.config 配置文件
2) 编辑配置文件
具体配置如下:
3) 设置启动服务类
具体源码如下:
---恭喜,到这一步你已经全部完成了。WCF服务 。
现在 我们就将它 部署到 测试环境上。--具体部署 还是去参考: 创建 Windows Service 服务
一、创建一个WIndow Service 服务
具体步骤参考之前的文章 创建 Windows Service 服务?
二、 定义接口层
1) 创建一个 Window 类库
2) 创建一个接口类
注: 创建好类库后 右键 类库-->>添加引用 (Add Reference)-->>选项卡中选择.net -->>找到 System.ServiceModel-->>选中-->>确定。
创建一个接口类: ITestInterface.cs
编写好自己需要的方法 (接口中都是未实现的方法)
在接口上标注 [ServiceContract] (代表此接口及实现此接口的类都是对外发布的Service类)
在每个方法上标注 [OperationContract] (代表此 方法 外部可以访问到)
具体代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace MyTest.Contracts { //[ServiceContract]和[OperationContract]这两个标签需要导入using System.ServiceModel 命名空间。 //代表此接口及实现此接口的类都是对外发布的Service类 [ServiceContract(Name = "MyTest.Contracts", Namespace = "测试接口")] public interface ITestInterface { /// <summary> /// 获取 姓名 /// </summary> /// <returns></returns> [OperationContract] //使 外部可以访问到此方法。 // 注: 每个方法必须都加 [OperationContract]标识,否则外部无法调用。 string GetMyName(); //这里测试就定义这么一个简单的方法 //实际工作中根据自己的需要去定义... // //由于这里没有用到 Model 层, 如果需要使用到Model,应该增加如下配置: // [DataContract]标签,在每个需要序列化的成员变量上加入[DataMember]标签。 // 这两个标签在使用的进候需要导入using System.Runtime.Serialization命名空间。 // [DataContract] // WCF调用中类能够被序列化 // public class Model // { // [DataMember] // WCF调用中属性能够被序列化 // public string Name; // } } }
三、创建服务方法层 (相当于 项目中的BLL业务逻辑层)
1) 创建一个Window 类库
2) 创建 实现接口方法的类
注: 创建好类库后 右键 类库-->>添加引用 (Add Reference)-->>选项卡中选择.net -->>找到 System.ServiceModel-->>选中-->>确定。
右键 类库-->>添加引用 (Add Reference)-->>选项卡中选择Projects-->>找到 MyTest.Contracts-->>选中-->>确定。
创建一个类: Test.cs 并且继承 : ITestInterface 接口实现接口方法
在类上标注:[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
(此标签代表这个类采用SingleTone(单类模式)来生成 对象。)
四、配置 WCF
1) 添加一个 app.config 配置文件
2) 编辑配置文件
具体配置如下:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="TESTBehavior"> <serviceDebug includeExceptionDetailInFaults="true" /> <serviceMetadata httpGetEnabled="false" /> </behavior> </serviceBehaviors> </behaviors> <bindings> <netTcpBinding> <binding name="TcpTEST" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" transferMode="Streamed"> <security mode="None" /> </binding> </netTcpBinding> </bindings> <services> <!-- name="MyTest.Service.Test" 指定实现接口的方法 即:之前创建的类 Test.cs --> <service name="MyTest.Service.Test" behaviorConfiguration="TESTBehavior"> <host> <baseAddresses> <!-- 配置调用 的端口号 (建议配置端口 都大于 6000,因为 6000以下 因为大部分端口都被系统占用,如 80 端口 ) --> <add baseAddress="net.tcp://localhost:8888/service"/> </baseAddresses> </host> <!-- contract="MyTest.Contracts.ITestInterface" 指定 定义的接口 即:之前创建的接口 ITestInterface.cs --> <endpoint address="test" binding="netTcpBinding" contract="MyTest.Contracts.ITestInterface" bindingConfiguration="TcpTEST" /> <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" /> </service> </services> </system.serviceModel> </configuration>
3) 设置启动服务类
具体源码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.ServiceModel; namespace MyTest.Service { public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } private ServiceHost host; //启动 服务 调用 protected override void OnStart(string[] args) { //Test 是提供调用实现功能的类 即:之前创建的类 MyTest.Service.Test.cs host = new ServiceHost(typeof(Test)); host.Opened += delegate { // " 服务启动!" 这里可以定义一个 委托 记录下 服务启动日志 }; try { host.Open(); } catch (Exception ex) { //"服务启动异常!" //服务启动异常 可以记录下日志 host.Abort(); } } //关闭 服务 调用 protected override void OnStop() { //停止 服务 可以记录下日志 } } }
---恭喜,到这一步你已经全部完成了。WCF服务 。
现在 我们就将它 部署到 测试环境上。--具体部署 还是去参考: 创建 Windows Service 服务
相关文章推荐
- 如何:使用 ADO.NET 实体框架数据源创建数据服务(WCF 数据服务)
- Adhesive框架系列文章--WCF 分布式服务模块使用和实现
- 如何:使用反射提供程序创建数据服务(WCF 数据服务)
- 如何使用JDBC快速处理大数据
- 使用反射提供程序创建数据服务(WCF 数据服务)
- wcf 数据服务,实现接口功能
- 分布式DB四问 1如何实现高效主键2如何解决分布式事务3如何解决数据扩容4如何进行高效的数据聚合?
- [druid]大数据挑战——如何使用Druid实现数据聚合
- 我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading)
- 如何在列表数据中使用打印按钮实现打印预览
- 如何使用CA/400批处理的方式传输数据
- 使用Hystrix实现微服务的容错处理
- SOA 探索之 :数据服务层如何加速 SOA 实现
- 在Scala里面如何使用正则处理数据
- 使用WCF实现SOA面向服务编程——简单的WCF开发实例
- Mybatis使用数据表&实体类属性不一致时候如何处理
- 在使用exp/imp时如何实现导入数据到指定的表空间
- 如何更好处理数据仓库服务必然需要云数据库HybridDBforPostgreSQL
- WCF单例服务,如何实现并发
- 使用“消息服务框架”(MSF)实现分布式事务的三阶段提交协议(电商创建订单的示例)