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. Chapter 6

    6.1 顶点与输入布局 Direct3D 的顶点可以包含除空间坐标外的其他数据.如: struct Vertex1 { XMFLOAT3 Pos; XMFLOAT4 Color; }; struct ...

  2. [转] 一个简单的零配置命令行HTTP服务器 - http-server (nodeJs)

    [From] http://www.cnblogs.com/lucker/p/4108838.html http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs. 如果你不 ...

  3. Q686 重复叠加字符串匹配

    给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd",B = " ...

  4. 网络知识之ipset

    ipset介绍 ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则.而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以 ...

  5. 第四次 Scrum Meeting

    第四次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/8 22:00 30min 大运村1号楼3F 附Github仓库:WEDO 例会照片 工作情况总结(4.8) ...

  6. APP在用户设备发生crash,应该怎么修复

    Crash原因 Crash原因有共性,归纳起来有: 内存管理错误 程序逻辑错误  SDK错误 (部署版本< 编译版本) 主线程阻塞 内存管理错误 内存管理是iPhone开发所要掌握的最基本问题, ...

  7. opensuse13.1 安装 SqliteMan

    Sqliteman是一个图形界面的sqliteman客户端 官网  http://www.sqliteman.com/ 1 添加源 http://download.opensuse.org/repos ...

  8. TOJ 1258 Very Simple Counting

    Description Let f(n) be the number of factors of integer n. Your task is to count the number of i(1 ...

  9. CSS3实现鼠标悬停扩展效果

    我们在做导航标签的时候,有时会出现空间过于拥挤需要隐藏部分内容的情况,所以在这里我自己写了一个鼠标悬停显示扩展内容的效果,如下图所示. 总的来说效果还是比较好实现,但是比较头疼的是三角部分使用了伪元素 ...

  10. Guid和Oracle中16进制字符的转换

    我们知道在Oracle中存的guid是16进制字符串,而在我们的C#代码中存的是guid对象,这样我会就要进行转换, 下面给出了两者进行转换的方法: public class Guid2RawProc ...