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. 查找表set和map 349, 350

    两类查找问题: 1)查找有无: - 某个元素是否存在,通常使用set(集合) 2)查找对应关系(键值对应) - 某个元素出现了几次,map(字典) set和map都不允许里面的键值重复. 常见操作: ...

  2. Codeforces - 38G 可持久化Treap 区间操作

    题意:\(n\)个人排队,每个人有重要度\(p\)和不要脸度\(c\),如果第\(i\)个人的重要度大于第\(i-1\)个人的重要度,那么他们之间可以交换,不要脸度-1,交换后先前的第\(i\)个人也 ...

  3. [转] Linux命令——timeout

    [From] https://blog.csdn.net/xiaqunfeng123/article/details/54315390 Linux命令——timeout 命令简介 运行指定的命令,如果 ...

  4. 用leiningen来运行和打包clojure项目

    今天是2017年5月24日.隔壁team用clojure写了个工具,我们要拿来用,于是弄了个leiningen来尝试.还没有最后成功,先记录一下一些连蒙带猜的步骤,以免忘记. 一.单独运行的cloju ...

  5. gitlab 日常运维命令

    2018-10-24 gitlab查看版本 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 查看gitlab服务状态命令 gitlab-ct ...

  6. PIE SDK矢量数据项查看

    1. 功能简介 矢量数据由大量要素信息构成,矢量数据项查看可以看到数据的属性表,下面就基于PIE SDK,介绍矢量数据项查看功能的实现. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 加载 ...

  7. linux 输出 之 nl 命令

    1.命令格式:nl [选项]... [文件]... 2.命令参数: -b  :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n): -b t :如果 ...

  8. python-几种快速了解函数及模块功能的方式

    背景 在进行编程的时候经常要导入各种包的各种函数,但是很多包一下又不知道为什么要导入这个模块,所以想总结下有哪些方法可以让我们快速熟悉其中函数的作用. import numpy as np impor ...

  9. pat1007. Maximum Subsequence Sum (25)

    1007. Maximum Subsequence Sum (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  10. HTML <frameset>不同frame之间传值

    布局 左右30%--70%,点击左边的复选框,右边显示相应的反应. 代码 main2.html <html> <frameset cols="30%, 70%"& ...