1. 创建WCF服务

在vs2010中创建WCF服务应用程序,会自动生成一个接口和一个实现类:(IService1和Service1)
 IService1接口如下:


  1.  
    using System.Runtime.Serialization;
  2.  
    using System.ServiceModel;
  3.  
    using System.ServiceModel.Web;
  4.  
    using System.Text;
  5.  
    namespace WcfService
  6.  
    {
  7.  
    [ServiceContract]
  8.  
    public interface IService1
  9.  
    {
  10.  
    [OperationContract]
  11.  
    string GetData(int value);
  12.  
     
  13.  
    [OperationContract]
  14.  
    CompositeType GetDataUsingDataContract(CompositeType composite);
  15.  
    }
  16.  
    // 使用下面示例中说明的数据约定将复合类型添加到服务操作。
  17.  
    [DataContract]
  18.  
    public class CompositeType
  19.  
    {
  20.  
    bool boolValue = true;
  21.  
    string stringValue = "Hello ";
  22.  
     
  23.  
    [DataMember]
  24.  
    public bool BoolValue
  25.  
    {
  26.  
    get { return boolValue; }
  27.  
    set { boolValue = value; }
  28.  
    }
  29.  
     
  30.  
    [DataMember]
  31.  
    public string StringValue
  32.  
    {
  33.  
    get { return stringValue; }
  34.  
    set { stringValue = value; }
  35.  
    }
  36.  
    }
  37.  
    }
Service1实现类如下:
  1.  
    using System;
  2.  
    using System.Collections.Generic;
  3.  
    using System.Linq;
  4.  
    using System.Runtime.Serialization;
  5.  
    using System.ServiceModel;
  6.  
    using System.ServiceModel.Web;
  7.  
    using System.Text;
  8.  
     
  9.  
    namespace WcfService
  10.  
    {
  11.  
    public class Service1 : IService1
  12.  
    {
  13.  
    public string GetData(int value)
  14.  
    {
  15.  
    return string.Format("You entered: {0}", value);
  16.  
    }
  17.  
     
  18.  
    public CompositeType GetDataUsingDataContract(CompositeType composite)
  19.  
    {
  20.  
    if (composite == null)
  21.  
    {
  22.  
    throw new ArgumentNullException("composite");
  23.  
    }
  24.  
    if (composite.BoolValue)
  25.  
    {
  26.  
    composite.StringValue += "Suffix";
  27.  
    }
  28.  
    return composite;
  29.  
    }
  30.  
    }
  31.  
    }
2.创建Window Service ,把WCF服务放在window Service中

先在window Service中添加引用,在对话框中选择Projects->Solution然后将wcfservice引入,这就在windows service中引用wcfservice里的service1时就不会报错了。

  1.  
    using System;
  2.  
    using System.Collections.Generic;
  3.  
    using System.ComponentModel;
  4.  
    using System.Data;
  5.  
    using System.Diagnostics;
  6.  
    using System.Linq;
  7.  
    using System.ServiceProcess;
  8.  
    using System.Text;
  9.  
    using System.ServiceModel;
  10.  
    using WcfService;
  11.  
     
  12.  
    namespace WindowsServiceDemo
  13.  
    {
  14.  
    public partial class Baowg : ServiceBase
  15.  
    {
  16.  
     
  17.  
    private ServiceHost host;
  18.  
     
  19.  
    public Baowg()
  20.  
    {
  21.  
    InitializeComponent();
  22.  
    }
  23.  
     
  24.  
    protected override void OnStart(string[] args)
  25.  
    {
  26.  
    if (this.host != null)
  27.  
    {
  28.  
    this.host.Close();
  29.  
    }
  30.  
    this.host = new ServiceHost(typeof(WcfService.Service1));
  31.  
    this.host.Open();
  32.  
     
  33.  
    }
  34.  
     
  35.  
    protected override void OnStop()
  36.  
    {
  37.  
    if (this.host != null)
  38.  
    {
  39.  
    this.host.Close();
  40.  
    }
  41.  
    }
  42.  
    }
  43.  
    }
增加app.config文件
 
  1.  
    <?xml version="1.0" encoding="utf-8" ?>
  2.  
    <configuration>
  3.  
    <system.serviceModel>
  4.  
    <services>
  5.  
    <service name="WcfService.Service1" behaviorConfiguration="basicBehavior">
  6.  
    <host>
  7.  
    <baseAddresses>
  8.  
    <add baseAddress="http://localhost:8999/Baowg"/> <!--windows service的地址-->
  9.  
    </baseAddresses>
  10.  
    </host>
  11.  
    <!--wcfservice的地址-->
  12.  
    <endpoint address="http://localhost:8999/Service1" contract="WcfService.IService1" binding="basicHttpBinding" />
  13.  
    </service>
  14.  
    </services>
  15.  
    <behaviors>
  16.  
    <serviceBehaviors>
  17.  
    <behavior name="basicBehavior">
  18.  
    <serviceMetadata httpGetEnabled="true" />
  19.  
    </behavior>
  20.  
    </serviceBehaviors>
  21.  
    </behaviors>
  22.  
    </system.serviceModel>
  23.  
     
  24.  
    </configuration>
增加安装服务类。
在服务类的设计面板上,点鼠标右键,然后在弹出的菜单上,点add installer项,然后一个叫ProjectInstaller类增加成功。
在设计面板上有两个控件:
一个叫serviceProcessInstaller1.选中它,到属性窗口,选择account,可以选择windows servcie的login用户身份,一般选择NetworkService.
一个叫ServiceInstaller1.选中它到属性窗口,可以设置服务名,启动类型等关于服务的一些设置。
 
3. 安装或卸载Windows 服务
在windows service上生成解决方案,得到exe
管理员身份运行vs2010的命令行,在exe所在目录执行installutil xxxx.exe
在服务管理中启动baowg服务
4. 客户端调用WCF服务
把baowg服务启动后,给Client项目增加服务引用。输入服务地址http://localhost:8999/Baowg,也就是第一步中配置文件中的地址。
自动生成配置文件app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:8999/Service1" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
                name="BasicHttpBinding_IService1" />
        </client>
    </system.serviceModel>
</configuration>

宿主在Windows Service中的WCF(创建,安装,调用) (host到exe,非IIS)的更多相关文章

  1. NetCore Selfhost,IIShost,Windows Service Host详解(自宿主、宿主在IIS,宿主在Windows Service中)

    第一部分.自托管 一.依赖.Net Core环境 修改 project.json 文件内容,增加发布时需要包含文件的配置内容(NetCore2.0版本不需要任何设置,NetCore2.0开始彻底放弃p ...

  2. 如何托管ASP.NET Core应用到Windows Service中

    (此文章同时发表在本人微信公众号"dotNET开发经验谈",欢迎右边二维码来关注.) 题记:正在构思一个中间件的设计,考虑是否既可以使用最新的技术,也可以兼顾传统的部署模式.所以有 ...

  3. ASP.NET Core应用到Windows Service中

    托管到Windows Service中 众所周知,ASP.NET Core采用了和传统ASP.NET不同的托管和HTTP处理方式,即把服务器和托管环境完全解耦. ASP.NET Core内置了两个HT ...

  4. .NET 6学习笔记(3)——在Windows Service中托管ASP.NET Core并指定端口

    在上一篇<.NET 6学习笔记(2)--通过Worker Service创建Windows Service>中,我们讨论了.NET Core 3.1或更新版本如何创建Windows Ser ...

  5. Windows Service中使用Threading.Timer需注意回收

    在Windows Service中使用Threading.Timer时需要注意回收池问题 Threading.Timer是基于线程池的,系统会对其进行垃圾回收. 当Threading.Timer定义在 ...

  6. C/C++中动态链接库的创建和调用

    DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的 ...

  7. [转贴] C/C++中动态链接库的创建和调用

    DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的 ...

  8. windows 10中的ubuntu子系统安装桌面环境的方法

    windows 10中的ubuntu子系统安装桌面环境的方法 (How to install Ubuntu-desktop in windows 10 Subsystem for Linux) 转载 ...

  9. 创建寄宿在Windows服务中的WCF服务

    1.创建Windows服务项目 2.Server1改名为你想要的名称,比如WinServer 3.在项目中新建一个WCF文件夹,用于存放wcf服务文件. 注:在WcfServer类的上面还要添加 [S ...

随机推荐

  1. Windows下当地RabbitMQ服务的安装

    Windows下本地RabbitMQ服务的安装 本文参考:刘若泽相关技术文档 当然这些内容页可以通过RabbitMQ官方网站获得. RabbitMQ配置说明手册 一.RaibbitMQ服务器配置 1. ...

  2. Java虚拟机--垃圾收集器和内存分配

    垃圾收集器和内存分配 程序计数器.虚拟机栈.本地方法栈这三个区域和线程的生命周期一致,所以方法结束或者线程结束时,内存自然就跟着回收了.Java堆和方法区,只有在程序处于运行期间才能知道会创建哪些对象 ...

  3. 【Linux】安装openssh-server依赖openssh-client版本错误的解决办法

    这是因为,openssh-server是依赖于openssh-clien的,ubuntu自带了openssh-client,自带的openssh-clien与所要安装的openssh-server所依 ...

  4. 利用netty简单实现聊天室

    1.导入依赖包 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</a ...

  5. Crossing River(1700poj)

    Crossing River Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9919   Accepted: 3752 De ...

  6. LINQ to Objects系列(1)相关技术准备

    LINQ to Objects是LINQ的一部分,是查询对象集合的一种语法.首先看一下LINQ的体系结构,这样对LINQ有一个大致的了解.如图. 第一篇文章主要是回顾一下学习LINQ to Objec ...

  7. JavaScript--DOM进阶(20)

    // DOM自身存在很多类型,在上一章中有介绍,比如Element类型:表示的是元素节点;再比如Text类型;表示的是文本节点; 一 DOM类型 类型名 说明 Node 表示所有类型值的统一接口,IE ...

  8. js-ES6学习笔记-async函数(2)

    1.async函数返回一个 Promise 对象. async函数内部return语句返回的值,会成为then方法回调函数的参数. async function f() { return 'hello ...

  9. js-JavaScript常见的创建对象的几种方式

    1.通过Object构造函数或对象字面量创建单个对象 这些方式有明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为了解决这个问题,出现了工厂模式. 2.工厂模式 考虑在ES中无法创建类( ...

  10. fiddler常见的应用场景

    在移动互联网时代,作为软件测试工程师,fiddler绝对是值得掌握并添加进技术栈里的工具之一. 那么,fiddler在日常的测试工作中,一般都有哪些常见的应用场景呢? 根据以往工作经验,大概有如下4类 ...