前言

重新找了工作,过去的事情就过去好了。有些不一样的经历也不是说一定就是坏事。

第24集 在控制台应用程序中自托管WCF服务 Self hosting a wcf service in console application

第23集比较简短,总共2分钟不到的样子,介绍了WCF托管的几种方式,其实就是如何把这个服务架起来,可以让外部调用。总共有4中。

方式 描述
self-hosting(自托管) 用控制台或者winform的应用程序来托管
windows 服务 用windows 服务的方式
IIS 可以用IIS服务来托管服务,只支持http 协议的Binding
Windows Activation Service(WAS) 用带WAS的IIS 7 来托管服务,支持所有的Binding

24集先讲一下第一种,self-hosting

所谓的self-hosting就是把服务交给 .net的托管代码程序(比如console application,winform application,WPF application)来host的方式。有点拗口,反正只要看服务是架在哪里的就行了。

self-hosting 的方式有几个优点:

1. 容易架设。配合VS,只要编辑一下app.config就可以很容易跑起来。

2. 容易调试。没有必要去附加什么其他的进程(比如iis 的w3wp)。

3. 支持所有的传输协议。

4. 生命周期可控。通过调用Open() 和 Close()方法可以很方便的控制服务的状态。

有优点就一定有缺点:

1. 只有在service host running了之后才能调用service。

2. 不能像iis被动激活。

3. 要自己写一些代码来控制。

下面来实践一下。

其实也已经这么多集了,大致也都明白了,这集的方式稍微有点不同,用了一下vs自带的WCF config编辑器,而不是以前纯粹手写的xml代码。

1. 新建一个空的解决方案,添加一个类库,删除自动生成.cs 文件,再添加一个wcf项目,取名HelloService。

2. 自动的,该项目会添加一个接口文件,一个类文件,一个app.config文件。 config文件暂时先不管。

3. 简单的修改一下IHelloService。

    [ServiceContract]
public interface IHelloService
{
[OperationContract]
string GetMessage(string name);
}

然后是接口实现部分。

    public class HelloService : IHelloService
{
public string GetMessage(string name)
{
return "Hello " + name;
}
}

然后编译一下,让他生成dll,后面会用到。

4. 接下去给该解决方案添加一个console application。并且设置为启动项。

5. 添加对上面HelloService的引用。再添加一个app.config文件。

到这一步之后以前的做法就copy 第2步生成的config文件内容,paste到这里面,然后稍微手动修改一下。再删掉原来项目中的config文件。这次不一样。

6. 右击host下面的App.config,有个编辑WCF配置的选项。

7. 首先要来配置一个service所需要的ABC三个属性。

选中servcies,点击Create a New Service,然后Browse,定位到第3步生成的dll。

8. Next。我们就一个Contract,所以继续Next。

9. 选择需要的Binding。

10.  第一个比较简单,第二个看意思高级一点,什么分布式啊, 可靠性啊,双向通信什么的。反正我也不懂。。。

11. 继续Next。写地址了。

这里支持相对地址或者绝对地址。这里用一下相对地址,因为后面我们还要配一下BaseAddress。留个空吧。 继续Next,就可以Finish了。

12. 添加BaseAddress

13. 启用一下serviceMetadata让客户端能自己生成代理类。

14. 添加完之后双击这个serviceMetadata,设置HttpGetEnabled = true

15. 然后把这个behavior和我们的service 关联起来。

保存一下就可以关闭了。

然后check一下host下面的App.config 文件内容。基本上该有的都有了。

然后是写个测试的application,winform或者console都可以,没有问题。

这次讲解了一下4个host WCF service的方式的第一种 self-host,以及他的优缺点。

Thank you!

WCF 入门(23,24)的更多相关文章

  1. 【WCF】无废话WCF入门教程

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  2. 无废话WCF入门教程一[什么是WCF]

    http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html wcf技术交流,同学习共进步,欢迎加群:  群号:3981831 ...

  3. WCF入门教程一[什么是WCF]

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  4. WCF入门教程[WCF基本应用]

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  5. WCF入门教程系列一

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  6. WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]

    WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...

  7. 【转】WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  8. 【转】WCF入门教程一[什么是WCF]

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  9. 【ASP.NET 基础】WCF入门教程一(什么是WCF)?

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  10. WCF入门

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

随机推荐

  1. Spring中AOP原理,源码学习笔记

    一.AOP(面向切面编程):通过预编译和运行期动态代理的方式在不改变代码的情况下给程序动态的添加一些功能.利用AOP可以对应用程序的各个部分进行隔离,在Spring中AOP主要用来分离业务逻辑和系统级 ...

  2. MIT jos 6.828 Fall 2014 训练记录(lab 4)

    源代码参见我的github: https://github.com/YaoZengzeng/jos Part A: Multiprocessor Support and Cooperative Mul ...

  3. 使用nmon监控服务器性能

    1.下载nmon:http://nmon.sourceforge.net/pmwiki.php?n=Site.Download 2.选择适合Linux系统版本的相应nmon版本,Linux查看系统版本 ...

  4. 【温故而知新-Javascript】窗口效果 (全屏显示窗口、定时关闭窗口)

    1.全屏显示窗口 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  5. 如何对ZBrush中面部进行快速布线

    面部布线的最重要目的是为了表情动画.人物内心的各种不同的心里活动,主要是通过面部表情反映出来.而面部变化最丰富的地方是眼部(眉毛)和口 部,其他部位则相应的会受这两部分的影响而变化.对于面部表情,必须 ...

  6. 集合框架学习笔记<三>

    一些重要的区别 set与list的区别: set是无索引的,list是有索引的: ArrayList与LinkList的区别: 前者是基于数组实现的,后者是基于链表实现的: 两者的使用方法一样,但是在 ...

  7. javascript之享元模式

    实现享元模式的一般步骤: 1.将所有外在数据从目标类中剥离.具体做法是尽可能多的删除该类的属性,所删除的应该是那种因实例而异的属性.构造函数的参数也要这样处理,这些参数应该被添加到该类的各个方法. 这 ...

  8. js判断滚动条到底部

    判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop.clientHeight.scrollHeight. scrollTop为滚动条在Y轴上的滚动距离. clientHeight为内容 ...

  9. 【转】【Asp.Net】ASP.NET中自定义控件无法响应事件

    在自定义服务器控件中增加事件处理程序,但代码运行时没有错误,按钮点击下去却没有反应.应该如何处理呢?(本例中,该自定义控件包括一个Button,和一个Label,我希望用户点击了这个Button后,改 ...

  10. windows phone 8.0 app 移植到windows10 app 页面类

    phone:PhoneApplicationPage    全部替换为Page phone:WebBrowser               全部替换为   WebView IsScriptEnabl ...