一,使用手写代码方式创建
首先建立如下类:
然后在引用中添加如下引用:
接着创建我们要开放的服务接口:
并且为此接口添加实现类:
定义好了服务和服务的实现之后,我们就可以开启服务了:
namespace 第一个WCF应用程序 { class Program { static void Main(string[] args) { using (MyHelloHost host = new MyHelloHost()) //创建一个服务对象 { host.open(); //开启服务 Console.Read(); } } } public class MyHelloHost : IDisposable //获取定义一种释放资源的方法 { private ServiceHost mylittleHello; //定义一个服务对象 //定义基地址 public const string BaseAddress = "net.pipe://localhost"; //定义一个可选地址,可以选中性定义 public const string HelloServiceAddress = "Hello"; //定义服务契约实现类型 public static readonly Type ServiceType = typeof(HelloService); //服务契约接口 public static readonly Type ContractType = typeof(IHelloService); //创建一个绑定:定义一个服务绑定 public static readonly Binding helloBinding = new NetNamedPipeBinding(); //创造一个服务对象 protected void CreateHelloServiceHost() { //创建一个服务的对象 mylittleHello =new ServiceHost (ServiceType ,new Uri[]{new Uri(BaseAddress)}); //给当前服务对象添加终结点 mylittleHello.AddServiceEndpoint(ContractType, helloBinding, HelloServiceAddress); } public ServiceHost MylittleHello //封装字段 { get { return mylittleHello; } } //定义打开服务的方法 public void open() { Console.WriteLine("开始启动服务-----"); mylittleHello.Open();//打开 Console.WriteLine("服务已经启动-----"); } /// <summary> /// ///构造方法 /// </summary> public MyHelloHost() { CreateHelloServiceHost(); } /// <summary> /// 销毁对象 /// </summary> public void Dispose() { if (mylittleHello!=null) { (mylittleHello as IDisposable).Dispose();//销毁对象 } } } }
开启结果如下:
之后,我们可以测试调用此服务:
namespace 第一个MVC应用程序的客户端调用服务示例 { class Program { static void Main(string[] args) { using (HelloProxy proxy=new HelloProxy ()) { //利用代理调用服务 Console.WriteLine(proxy.Say("lhc")); } } } //硬编码定义服务契约 [ServiceContract] interface IService { //服务操作 [OperationContract] string Say(string name); } /// <summary> /// 客户端代理典型 /// </summary> class HelloProxy : ClientBase<IHelloService>, IService { //硬编码定义绑定 public static readonly Binding HelloBinding = new NetNamedPipeBinding(); //硬编码定义地址 public static readonly EndpointAddress HelloAddress = new EndpointAddress(new Uri("net.pipe://localhost/Hello"));//必须与服务端地址匹配(协议+地址) /// <summary> /// 构造方法 /// </summary> public HelloProxy() : base(HelloBinding, HelloAddress) { } public string Say(string name) { //使用channel属性对服务进行调用 return Channel.SayHello(name); } } }
结果如图:
wow,感觉是不是有点儿乱呢?简单开启服务就要那么多代码,下面,我们将使用配置文件来简化开启服务的过程。
二,使用配置文件部署WCF应用程序
我们在应用程序中添加配置文件如下:
之后的启动服务:
可以看出,使用配置文件,我们可以将服务三要素写入配置文件,并且可以充分发挥配置文件易修改的优势,做到灵活配置。
小结:
感觉使用了WCF,我们只需开放出接口给其他系统调用即可,更重要的是,这些相互调用的系统可以在不同的物理空间,但是使用了WCF之后,我们可以将不同地域的服务整合到一个页面上,that's cool~