📜  WCF-Windows服务托管(1)

📅  最后修改于: 2023-12-03 15:35:39.806000             🧑  作者: Mango

WCF - Windows服务托管

Windows Communication Foundation (WCF) 是一个 Microsoft .NET 的技术,用于在应用程序之间提供分布式通信服务。WCF 可以通过多种传输协议和编码方式进行通信,包括 HTTP、TCP、Named Pipes 和 MSMQ。 WCF 还提供了一些终结点选项,包括访问 Web 服务和支持 SOAP、REST 和 JSON 等协议。

Windows 服务托管是一种常见的方式,通过这种方式部署 WCF 服务,将其作为 Windows 服务运行在服务器上,以实现长时间运行的稳定性和可靠性。

实现方法
创建 WCF 服务

首先,我们需要创建一个 WCF 服务。可以使用 Visual Studio 来创建一个空白的 WCF 服务应用程序,或者使用 WCF 服务库模板。接下来,我们需要配置服务行为和终结点。

<system.serviceModel>
   <services>
      <service name="MyService">
         <endpoint address="http://localhost:8000/MyService" binding="basicHttpBinding" contract="IMyService"/>
         <endpoint address="net.tcp://localhost:8001/MyService" binding="netTcpBinding" contract="IMyService"/>
         <host>
            <baseAddresses>
               <add baseAddress="http://localhost:8000/"/>
               <add baseAddress="net.tcp://localhost:8001/"/>
            </baseAddresses>
         </host>
      </service>
   </services>
</system.serviceModel>
创建 Windows 服务

然后,我们需要创建一个 Windows 服务,用于托管 WCF 服务。可以使用 Visual Studio 创建一个新的 Windows 服务项目或者手动创建一个服务。创建服务后,我们可以将 WCF 服务的主机代码添加到服务的 OnStart() 方法中。

public partial class MyService : ServiceBase
{
   ServiceHost myServiceHost = null;
   public MyService()
   {
      InitializeComponent();
   }

   protected override void OnStart(string[] args)
   {
      if (myServiceHost != null)
      {
         myServiceHost.Close();
      }

      myServiceHost = new ServiceHost(typeof(MyWCFService));
      myServiceHost.Open();
   }

   protected override void OnStop()
   {
      if (myServiceHost != null)
      {
         myServiceHost.Close();
         myServiceHost = null;
      }
   }
}
安装和运行服务

最后,我们需要使用 InstallUtil.exe 工具来安装和启动 Windows 服务。该工具位于 .NET Framework 安装目录下的 Framework 目录中。使用命令提示符启动该工具,然后运行命令行:

InstallUtil.exe MyWindowsService.exe

运行服务后,可以使用服务管理器查看和控制服务。可以将服务设置为自动启动,以便系统启动时自动启动服务。

总结

WCF 是一个非常强大的分布式通信框架,可以支持多种协议和传输方式。通过将 WCF 服务托管到 Windows 服务中,可以实现长时间运行的稳定性和可靠性。这对于那些需要提供分布式服务的企业应用程序来说特别有用。