博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF入门三[WCF宿主]
阅读量:5776 次
发布时间:2019-06-18

本文共 3123 字,大约阅读时间需要 10 分钟。

一、概述

  WCF程序必须在宿主上运行,也就是WCF服务必须寄宿在某一个windows的进程中,可以是IIS、控制台程序、窗体程序、WAS以及所有.net程序等程序进程中。在我用VS2013创建WCF服务的时候有四个类型:WCF服务库、WCF服务应用程序、WCF工作流服务应用程序和联合服务库。现在处于初学阶段,主要学习用到的是WCF服务库和WCF服务应用程序,它们有什么区别呢?

  1.WCF服务库:相当于一个包含WCF服务的类库,本身不能执行,必须通过别的宿主程序(如控制台程序、WAS等)托管引用后才可以使用,可以提高代码的复用性。

  2.WCF服务应用程序:相比之下可以独立运行,基于IIS托管的程序。在开发基于IIS的WCF服务时比较多见,自学的时候也多用这个,在中就使用过。

  IIS的宿主实现在之前讲过,所以不再复述。这里我们先创建一个WCF服务库WcfServiceLibrary,将默认的文件IService1.cs和Service.cs删除,新建一个WCF服务Day.cs会生成Day,cs和IDay.cs两个文件,接口和实现如下:

namespace WcfServiceLibrary{    [ServiceContract]    public interface IDay    {        [OperationContract]        string ShowDay(int day);    }}namespace WcfServiceLibrary{    public class Day : IDay    {        public string ShowDay(int day)        {            return string.Format("WCF服务返回Day是:{0}", day);        }    }}

  这里我们在新建WCF服务Day.cs的时候VS自动给在配置文件中加上了该服务的信息,也就是终结点的信息。这里和寄宿在IIS中由IIS监听不同,如果没有添加的话需要手动添加在配置文件中或者在程序代码中写终结点的相关配置细信息Behaviors、Address等,不过正常情况下都是依赖配置文件的。

  由于控制台程序、窗体程序、windows服务和.net程序等作为宿主都是一样的,可以通过读取配置文件或者代码配置终结点等服务信息来实现。以下主要用控制台程序通过这两点实现WCF宿主。

二、代码配置终结点信息

  1.在解决方案下新建一个控制台程序ConsoleApplication。

  2.添加引用->解决方案->WcfServiceLibrary.dll。

  3.添加引用->程序集->System.ServiceModel。

  4.添加代码如下,具体请查看:

namespace ConsoleApplication{    class Program    {        static void Main(string[] args)        {            //创建宿主的基地址            Uri baseAddress = new Uri("http://192.168.3.30:8080/Day");            //创建宿主            using (ServiceHost host = new ServiceHost(typeof(Day), baseAddress))            {                //向宿主中添加终结点                host.AddServiceEndpoint(typeof(IDay), new WSHttpBinding(), "");                //将HttpGetEnabled属性设置为true                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();                smb.HttpGetEnabled = true;                //将行为添加到Behaviors中                host.Description.Behaviors.Add(smb);                //打开宿主服务                host.Open();                Console.WriteLine("WCF中的HTTP监听已启动....");                Console.ReadLine();                host.Close();            }        }    }}

  6.启动控制台程序,如果启动不了的话,用管理员身份运行exe,启动WCF服务。

  7.新建一个控制台解决方案,并添加地址为http://192.168.3.30:8080/Day的服务引用。之后正常调用服务如下所示:

三、读取配置文件

  1、2、3三个步骤同上,更改代码如下,这里是直接读取配置文件中的ServiceHost:

class Program    {        static void Main(string[] args)        {            ServiceHost host = new ServiceHost(typeof(Day));            //打开宿主            host.Open();            Console.Write("WCF中的HTTP监听已启动....");            Console.ReadKey();            host.Close();        }    }

  在控制台应用程序的配置文件App.Config修改如下,这里的配置项必须要对否则启动会报错。

  重复同上使用WCF服务。

四、总结

  实现控制台宿主、winform宿主和windows服务宿主的代码就是以上两种方式,虽然宿主不同但是方法其实是相同的,可以根据以上的控制台宿主的实现来实现其他同类型的宿主,但是相比之下用IIS服务作为宿主还是最为主要的手段,更加的方便快捷。

五、说明

  这个随笔是我自己学习流程的一个记录,和大家共勉。

转载于:https://www.cnblogs.com/xwc1996/p/9833242.html

你可能感兴趣的文章
Tasks and Back stack 详解
查看>>
关于EXPORT_SYMBOL的作用浅析
查看>>
成功的背后!(给所有IT人)
查看>>
在SpringMVC利用MockMvc进行单元测试
查看>>
Nagios监控生产环境redis群集服务战
查看>>
Angular - -ngKeydown/ngKeypress/ngKeyup 键盘事件和鼠标事件
查看>>
Android BlueDroid(一):BlueDroid概述
查看>>
Java利用httpasyncclient进行异步HTTP请求
查看>>
循环多少次? 【杭电--HDOJ-1799】 附题+具体解释
查看>>
宿舍局域网的应用
查看>>
html代码究竟什么用途
查看>>
oracle的substr函数的用法
查看>>
JavaWeb开发之普通图片验证码生成技术与算术表达式验证码生成技术
查看>>
Hadoop HDFS编程 API入门系列之路径过滤上传多个文件到HDFS(二)
查看>>
Nginx反向代理,负载均衡,redis session共享,keepalived高可用
查看>>
CentOS7 yum 安装git
查看>>
html5视频标签
查看>>
三元表达式之理解/jquery源代码分析之$.inArray实现
查看>>
STM32 mdk软件仿真时过不去时钟的问题
查看>>
Spark Streaming概念学习系列之Spark Streaming容错
查看>>