1. 写WCF服务
  创建一个接口类,与一个实现类。接口类上打上[ServiceContract]标签,需要暴露的服务方法上打上[OperationContract]

(注意:增加System.ServiceModel 类的引用

代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.ServiceModel;
  6. using System.Configuration;
  7. namespace Angelia.WinService.DemoWinService
  8. {
  9. [ServiceContract]
  10. interface IMyService
  11. {
  12. [OperationContract]
  13. string OutputString(string paramString);
  14. }
  15. public class MyService : IMyService
  16. {
  17. 实现接口方法的代码
  18. }
  19. }

增加app.config文件,增加WCF服务信息的结点如下:

  1. <system.serviceModel>
  2. <services>
  3. <service name="Angelia.WinService.DemoWinService.MyService" --服务的类名 behaviorConfiguration="basicBehavior">
  4. <host>
  5. <baseAddresses>
  6. <add baseAddress="http://localhost:8999/MyService"/>
  7. </baseAddresses>
  8. </host>
  9. <endpoint address="http://localhost:8999/MyServiceService" --指定服务的位置
  10. contract="Angelia.WinService.DemoWinService.IMyService" --接口类的名字,即是contract
  11. binding="basicHttpBinding" />
  12. </service>
  13. </services>
  14. <behaviors>
  15. <serviceBehaviors>
  16. <behavior name="basicBehavior">
  17. <serviceMetadata httpGetEnabled="true" />
  18. </behavior>
  19. </serviceBehaviors>
  20. </behaviors>
  21. </system.serviceModel>

2.创建Window Service ,把WCF服务放在window Service中
找到visual studio 自动帮助创建的OnStart方法

  1. protected override void OnStart(string[] args)
  2. {
  3. ServiceHost host = new ServiceHost(typeof(MyService));  --把WCF的service宿主在这里
  4. host.Open();  --打开服务。
  5. }
增加安装服务类。
在服务类的设计面板上,点鼠标右键,然后在弹出的菜单上,点add installer项,然后一个叫ProjectInstaller类增加成功。
在设计面板上有两个控件:
一个叫serviceProcessInstaller1.选中它,到属性窗口,选择account,可以选择windows servcie的login用户身份,一般选择NetworkService.
一个叫ServiceInstaller1.选中它到属性窗口,可以设置服务名,启动类型等关于服务的一些设置。
3. 安装或卸载Windows 服务
执行下面的批处理文件安装服务。
  1. set WindowsServiceExeName="MyService.exe"  --第一步中编译出来的exe文件。
  2. set WindowsServiceName="MyServiceDemo"     --在安装类中设置的服务的名字。
  3. @ECHO.
  4. @ECHO -----------------------------------------------------------------
  5. @ECHO Installing Services %WindowsServiceName%
  6. @ECHO -----------------------------------------------------------------
  7. @ECHO.
  8. if Exist %WindowsServiceExeName% installutil %WindowsServiceExeName%
  9. @if errorlevel 1 goto :error
  10. httpcfg set urlacl -u http://+:8999/IngrianService/ -a D:(A;;GX;;;NS)
  11. @ECHO.
  12. @ECHO -----------------------------------------------------------------
  13. @ECHO Start the services for %WindowsServiceName%
  14. @ECHO -----------------------------------------------------------------
  15. @ECHO.
  16. net start %WindowsServiceName%
  17. @if errorlevel 1 goto :error
  18. @ECHO.
  19. @ECHO ----------------------------------------
  20. @ECHO InstallServices.bat Completed
  21. @ECHO ----------------------------------------
  22. @ECHO.
  23. @REM  ----------------------------------------
  24. @REM  Restore the command prompt and exit
  25. @REM  ----------------------------------------
  26. @goto :exit
  27. @REM  -------------------------------------------
  28. @REM  Handle errors
  29. @REM
  30. @REM  Use the following after any call to exit
  31. @REM  and return an error code when errors occur
  32. @REM
  33. @REM  if errorlevel 1 goto :error
  34. @REM  -------------------------------------------
  35. :error
  36. @ECHO An error occured in InstallServices.bat - %errorLevel%
  37. @PAUSE
  38. @exit errorLevel
  39. @REM  ----------------------------------------
  40. @REM  The exit label
  41. @REM  ----------------------------------------
  42. :exit
  43. popd
  44. set pause=
  45. PAUSE
  46. echo on

卸载Windows 服务

  1. set WindowsServiceExeName="MyService.exe"  --第一步中编译出来的exe文件。
  2. set WindowsServiceName="MyServiceDemo"     --在安装类中设置的服务的名字。
  3. @ECHO
  4. @ECHO -----------------------------------------------------------------
  5. @ECHO Stop the services for %WindowsServiceName%
  6. @ECHO -----------------------------------------------------------------
  7. @ECHO
  8. .net stop %WindowsServiceName%
  9. @ECHO
  10. @ECHO -----------------------------------------------------------------
  11. @ECHO Uninstalling Services for %WindowsServiceName%@ECHO -----------------------------------------------------------------
  12. @ECHO
  13. if Exist %WindowsServiceExeName% installutil /u %WindowsServiceExeName%
  14. @if  errorlevel 1 goto :error
  15. @ECHO
  16. @ECHO ----------------------------------------
  17. @ECHO UninstallServices.bat Completed
  18. @ECHO ----------------------------------------
  19. @ECHO
  20. @REM ----------------------------------------
  21. @REM Restore the command prompt and exit
  22. @REM ----------------------------------------
  23. @goto :exit
  24. @REM -------------------------------------------
  25. @REM Handle errors
  26. @REM
  27. @REM Use the following after any call to exit
  28. @REM and return an error code when errors occur
  29. @REM
  30. @REM if errorlevel 1 goto :error
  31. @REM -------------------------------------------
  32. :error
  33. @ECHO  An error occured in InstallServices.bat - %errorLevel%
  34. @PAUSE
  35. @exit errorLevel
  36. @REM ----------------------------------------
  37. @REM The exit label
  38. @REM ----------------------------------------
  39. :exit
  40. popd
  41. set pause=PAUSE
  42. echo on

3.客户端调用WCF服务
首先增加service reference.把服务启动后,输入服务地址,也就是第一步中配置文件中的地址,
(注意第一步中的locahost要改成机器的IP地址)
添加完引用后。app.config中有如下代码:

  1. <system.serviceModel>
  2. <bindings>
  3. <basicHttpBinding>
  4. <binding name="BasicHttpBinding_IIngrianService" closeTimeout="00:01:00"
  5. openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
  6. allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
  7. maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
  8. messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
  9. useDefaultWebProxy="true">
  10. <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
  11. maxBytesPerRead="4096" maxNameTableCharCount="16384" />
  12. <security mode="None">
  13. <transport clientCredentialType="None" proxyCredentialType="None"
  14. realm="" />
  15. <message clientCredentialType="UserName" algorithmSuite="Default" />
  16. </security>
  17. </binding>
  18. </basicHttpBinding>
  19. </bindings>
  20. <client>
  21. <endpoint address="http://10.1.24.143:8999/IngrianService" binding="basicHttpBinding"
  22. bindingConfiguration="BasicHttpBinding_IIngrianService" contract="ServiceReference1.IIngrianService"
  23. name="BasicHttpBinding_IIngrianService" />
  24. </client>
  25. </system.serviceModel>

调用服务方法:如下是调用代码:

    1. static void Main(string[] args)
    2. {
    3. ServiceReference1.MyServiceClient client = new ServiceReference1.MyServiceClient();
    4. string text = client.OutputString("dsfsdfsdfsdf");
    5. Console.WriteLine("string: " + text);
    6. Console.Read();
    7. }

使用WindowsService为宿主实装WCF 服务的更多相关文章

  1. Windows 服务为宿主的WCF服务,详细图解。

    废话不多说,直接进入主题: 1.打开vs2010新建项目,选择Windows服务. 2.选中WindowsService右击,添加WCF服务. 3.添加成功后,为下图.将接口类ITestService ...

  2. WCF系列教程之WCF服务宿主与WCF服务部署

    本文参考自http://www.cnblogs.com/wangweimutou/p/4377062.html,纯属读书笔记,加深记忆. 一.简介 任何一个程序的运行都需要依赖一个确定的进程中,WCF ...

  3. [问题]通过IIS宿主发布WCF服务,客户端添加服务引用出错的解决办法

    环境配置:Web服务器:Windows Server 2008,iis7.5,.net4.0客户端:XPsp3 vs2010 sp1 问题描述:1.确定WCF服务访问地址  http://servic ...

  4. 使用IIS发布WCF服务

    上一篇是Windows服务为宿主的WCF服务,现在用IIS为宿主发布WCF服务. 第一步:肯定是新建一个WCF服务啦[是WCF服务应用程序],然后在解决方案上再次添加一个新项目[我们选择WCF服务库, ...

  5. WCF服务二:创建一个简单的WCF服务程序

    在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WC ...

  6. WCF初探-8:WCF服务承载 (上)

    前言 任何一个程序的运行都需要依赖一个确定的进程中,WCF服务也不例外.如果使用WCF服务,我们就必须将服务承载于创建它并控制它的上下文和生存期的运行时环境中,承载服务环境的程序,我们称之为宿主.WC ...

  7. WCF服务的创建和发布到IIS

    一. WCF服务的创建 有两种创建方式: 1.WCF服务库 2.WCF服务应用程序 如下图所示: 这里选择WCF服务库.注意事项: 1.WCF服务库是一个类库项目,这里选择.net 3.5版本(版本高 ...

  8. 【转】WCF服务的创建和发布到IIS

    一. WCF服务的创建 有两种创建方式: 1.WCF服务库 2.WCF服务应用程序 如下图所示: 这里选择WCF服务库.注意事项: 1.WCF服务库是一个类库项目,这里选择.net 3.5版本(版本高 ...

  9. 添加宿主为控制台应用程序的WCF服务

    1.创建WCF服务库:WcfServiceLibrary,根据自动创建的代码修改自己的WCF 服务协议.操作协议.数据协议.本次先实现简单的WCF最基本的通信方式:请求->应答模式. 定义服务. ...

随机推荐

  1. 洛谷 P4093 [HEOI2016/TJOI2016]序列(Cdq+dp)

    题面 luogu 题解 \(Cdq分治+dp\) \(mx[i],mn[i]\)分别表示第\(i\)位最大,最小能取到多少 那么有 \(j < i\) \(mx[j] \le a[i]\) \( ...

  2. [转] #!/bin/sh & #!/bin/bash区别

    [From] http://blog.51cto.com/meiling/1826201 在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本.目前研发送测的shell脚本中主要有以下 ...

  3. RabbitMQ之消息持久化

    消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化. 为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exch ...

  4. window.open打开窗口的几种方式

    1. 在当前窗口打开百度,并且使URL地址出现在搜索栏中. window.open("http://www.baidu.com/", "_search"); w ...

  5. select简单示例,有注释

    全部都在代码中: import select import socket import queue """ 简单的select 实现echo server 个人理解: s ...

  6. 手指静脉细化算法过程原理解析 以及python实现细化算法

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8672489.html 文中的一些图片以及思想很多都是参考https://www.cnblogs ...

  7. ArrayList,LinkList,HashMap

    ArrayList底层实现数组,这是ArrayList get()方法的源码,底层是数组 根据下标返回在数组中对应的位置 ,查询快,插入慢 // Positional Access Operation ...

  8. bzoj 5298: [Cqoi2018]交错序列

    Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻的0).例如,000,001 ,101,都是交错序列,而110则不是.对 ...

  9. [转]ASP.NET MVC中的两个Action之间值的传递--TempData

    本文转自:ASP.NET MVC中的两个Action之间值的传递--TempData 一. ASP.NET MVC中的TempData 在ASP.NET MVC框架的ControllerBase中存在 ...

  10. 删除.browserslistrc文件就好了

    $ npm run dev > bootstrap-vue@1.0.0 dev E:\aawork\1work\2019.2\bootstrap-vue> webpack-dev-serv ...