none
一个WCF基础问题 RRS feed

  • 问题

  • 我因为项目需要刚刚开始学习WCF,有个基础问题请教大侠:

    我需要server端除了提供一组API供客户端调用之外,还需要它在启动的时候初始化几个线程,主动做一些工作,如同普通的应用程序一样。

    为满足这个需求,我需要如何做?具体地说,我应该定义何种模板的WCF工程(WCF Service Application or WCF Service Library?我不明白它们的区别)?如何hook在启动的地方?或者我可以让WCF host在一个Console程序里面?

    请高手指教,谢谢!

    2010年11月25日 2:17

答案

  • 查了MSDN,有个链接:http://technet.microsoft.com/zh-cn/library/ms733069.aspx

    但此链接中的代码部分缺失,所以没办法用。版主大人是否有全一些的教程可以帮助我创建这样的service?


    我建议你先做个Console托管的,很简单。方便调试,学习。

    接下来移植到Windows Service就非常的简单了,Windows实际是没有显示窗口,后台运行,而且需要安装。

    这个比较复杂。但是代码基本类似,你看看Console的,基本WindowsService的就可以举一反三了,服务的核心代码都是一样的,不一样的只是宿主启动和配置方式有点差别。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2010年11月25日 7:24
    版主

全部回复

  • 我解释一下,几天前我建了一个WCF工程,忘记用了什么模板,输出是一个console程序,这个可以满足我的需求。但我现在使用WCF service application模板再建工程,输出的却是一个dll,忘记之前是怎么弄的了。

    2010年11月25日 2:32
  • WCF服务库,可以认为是一个包含WCF服务以及契约定义的类库。这儿库还不能直接运行,你可以在其他项目里引用,在宿主里启用托管这个库。

    而WCF应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定义,可以直接看到运行的效果。此项目模板应该是基于IIS托管的程序。

    前者一般考虑WCF服务设计的时候,服务类的定义为单独的库,可以为其它项目使用。提高代码的复用性。

    后者在开发基于IIS托管的WCF服务程序时,比较多见,自学的时候也可以使用这种类型。

    当然你也可以修改这些代码,比如把WCF服务程序里的类,移到一个单独的类库里。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2010年11月25日 2:42
    版主
  • 我解释一下,几天前我建了一个WCF工程,忘记用了什么模板,输出是一个console程序,这个可以满足我的需求。但我现在使用WCF service application模板再建工程,输出的却是一个dll,忘记之前是怎么弄的了。


    Console托管WCF的话,我之前写的《WCF分布式开发步步为赢》系列基本都是Demo都是Console托管的。

    http://www.frankxulei.com/?p=562

    你可以在这里下载。

    但是 一般项目使用Windows Service托管,Console学习是没问题的。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2010年11月25日 2:45
    版主
  • 我解释一下,几天前我建了一个WCF工程,忘记用了什么模板,输出是一个console程序,这个可以满足我的需求。但我现在使用WCF service application模板再建工程,输出的却是一个dll,忘记之前是怎么弄的了。


    Console托管WCF的话,我之前写的《WCF分布式开发步步为赢》系列基本都是Demo都是Console托管的。

    http://www.frankxulei.com/?p=562

    你可以在这里下载。

    但是 一般项目使用Windows Service托管,Console学习是没问题的。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛
    Windows Azure中文技术论坛


    谢谢版主,我学习一下如何使用windows service托管WCF
    2010年11月25日 2:50
  • 查了MSDN,有个链接:http://technet.microsoft.com/zh-cn/library/ms733069.aspx

    但此链接中的代码部分缺失,所以没办法用。版主大人是否有全一些的教程可以帮助我创建这样的service?

    2010年11月25日 6:13
  • 查了MSDN,有个链接:http://technet.microsoft.com/zh-cn/library/ms733069.aspx

    但此链接中的代码部分缺失,所以没办法用。版主大人是否有全一些的教程可以帮助我创建这样的service?


    我建议你先做个Console托管的,很简单。方便调试,学习。

    接下来移植到Windows Service就非常的简单了,Windows实际是没有显示窗口,后台运行,而且需要安装。

    这个比较复杂。但是代码基本类似,你看看Console的,基本WindowsService的就可以举一反三了,服务的核心代码都是一样的,不一样的只是宿主启动和配置方式有点差别。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2010年11月25日 7:24
    版主
  • frank说的很清楚了 呵呵 service 和 consolehost是分开的 可以先建立wcf 服务库  然后以 servicehost host=new servicehost( typeof(wcfservice)); host.start() 方式启动这个服务 
    你随时可以开始!
    2010年11月25日 13:18
    版主
  • frank说的很清楚了 呵呵 service 和 consolehost是分开的 可以先建立wcf 服务库  然后以 servicehost host=new servicehost( typeof(wcfservice)); host.start() 方式启动这个服务 
    你随时可以开始!


    是的,我按照如下的过程成功创建了host WCF的windows service:

    1. 使用wizard创建一个windows service

    2. 在同一个solution中创建一个WCF的service library工程,实现相关接口

    3. 在service project中将WCF项目添加到引用,在ServiceBase子类中定义ServiceHost对象成员,在OnStart函数中用wcf library的类实例化并Open

    4. 在service project中创建app.config,配置WCF(create service, create service behavior, etc),注意要在service behavior中添加servicemetadata并将HttpGetEnabled设为true

    5. 在service project中创建installer

    6. 创建Visual studio installer项目,选择setup wizard模板,在选择项目输出时选择service project的primary out。

    7. build所有工程,在setup project选择install,将创建windows service,启动service

    8. 使用Visual studio自带的WcfTestClient工具进行测试

    2010年11月26日 2:37