zoukankan      html  css  js  c++  java
  • 宿主在Windows Service中的WCF(创建,安装,调用) (host到exe,非IIS)

    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>
  • 相关阅读:
    BOM,文档宽高及窗口事件小析
    表格、表单操作
    DOM相关属性,方法,兼容性问题处理小析
    js回调函数,字符串,数组小析
    js中return,this,arguments,currentStyle和getComputedStyle小析
    JS作用域,浏览器解析原理
    JS中注意事项
    PS中常用快捷键
    javaweb之框架标签(day1 框架标签的使用)
    网络编程课程复习
  • 原文地址:https://www.cnblogs.com/yelanggu/p/9295000.html
Copyright © 2011-2022 走看看