Windows宿主wcf服务
系统启动,服务即启动。调用很方便
windows宿主步骤:
- 编写WCF服务
- 添加windows安装项目
- 服务端配置
- 使用工具安装服务
- 服务调用
添加类库项目
项目中添加必要的引用 (参考:自宿主服务)然后添加一个wcf服务添加服务接口及接口实现
具体代码可参考上一篇,服务编写是一样的。参考:自宿主服务
添加windows 服务项目
添加成功之后
右键添加安装程序
项目中多出两个类文件
接着设置属性
属性设置完成之后,对wcf服务进行服务端的配置
配置文件中同样多一个host文件,因为windows服务也需要在服务端确定访问地址。
配置内容如下:
<system.serviceModel>
<services>
<service name="WCFWindowsHost.Service.UserInfoService" behaviorConfiguration="HttpGetEnable">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NoSecurity" contract="WCFWindowsHost.Service.IUserInfoService"></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8082/UserInfoService"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="HttpGetEnable">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="NoSecurity" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647"/>
<security mode="None"></security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
接下来编写服务启动程序
在添加的安装类中编写
partial class UserInfoWindowsService : ServiceBase
{
private readonly ServiceHost _host;
public UserInfoWindowsService()
{
InitializeComponent();
_host = new ServiceHost(typeof(UserInfoService));
}
protected override void OnStart(string[] args)
{
_host.Opened += delegate
{
Console.WriteLine(@"wcf windows service is start at @{0}", DateTime.Now);
};
_host.Closed += delegate
{
Console.WriteLine(@"wcf windows service is stop at @{0}", DateTime.Now);
};
try
{
_host.Open();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
protected override void OnStop()
{
try
{
_host.Close();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}
在windows服务项目中的program中调用
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
var servicesToRun = new ServiceBase[]
{
new UserInfoWindowsService(),
};
ServiceBase.Run(servicesToRun);
}
}
以上代码部分就完成
接下来,以管理员身份,在dos窗体,安装windows服务
使用的安装工具为:installUtil.exe 工具位置可查看实用小工具
安装:
首先路径转到windows服务项目的bin\Debug目录
然后找到nstallUtil.exe 工具的位置,右键+shift,复制为路径到dos窗体 ,然后再添加Debug目录下的exe程序
回车,执行命令:{windows服务项目地址}\bin\Debug>"{安装工具地址} {Debug下exe程序}
然后查看服务是否已成功安装
在“服务”中查看,是否有我们安装的服务WCFServiceTest
找到之后,启动服务,并在属性中设置为“自动”
启动之后,查看启动的服务的端口是否被监听
netstat -ano| findstr 8082
被监听,说明服务成功启动
wcf服务宿主windows之后的调试
可以将当前启动的windows服务附加到进程,然后在服务实现的代码上设置断点即可调试。
卸载windows服务
命令:{windows服务项目地址}\bin\Debug>"{安装工具地址} /u {Debug下exe程序}
以上就WCF宿主Windows的操作流程。