Topshelf 安装 WCF Windows宿主服务

1.wcf写应用服务。

[ServiceContract]
    public interface IService1
    {

        [OperationContract]
        string GetData(int value);
        [OperationContract]
        string GetUserName(int id);

        // TODO: 在此添加您的服务操作
    }
public class Service1 : IService1
    {
        private List<UserInfo> _users = new List<UserInfo> {
            new UserInfo{  Id=1,Name="kenn"},
            new UserInfo{  Id=2,Name="keny"},
            new UserInfo{ Id=3,Name="Xiao"}
        };
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

        

        public string GetUserName(int id)
        {
            var first = _users.FirstOrDefault(p => p.Id == id);
            return first != null ? first.Name : "没有查到用户信息";
        }
    }

 

2.Topshelf安装windows服务

a.在windows服务的config里面配置wcf

<system.serviceModel>
    <services>
      <service behaviorConfiguration="BasicServiceBehavior"
        name="WCFForWindows.Service1">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration=""
          contract="WCFForWindows.IService1">
          <identity>
            <dns value="127.0.0.1" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://127.0.0.1:61155/Service1.svc"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="BasicServiceBehavior">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="0" />
    <bindings>
      <netTcpBinding>
        <binding name="defaultBinding" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
          <security mode="None">
            <message clientCredentialType="None"/>
            <transport clientCredentialType="None"></transport>
          </security>
          <readerQuotas />
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>

 

b.安装Topshelf

install-package Topshelf

install-package Topshelf.Log4Net

c.写服务安装

static void Main(string[] args)
        {
            var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config");
            XmlConfigurator.ConfigureAndWatch(logCfg);

            HostFactory.Run(x =>
            {
                x.Service<WCFTest>(t=> {
                    t.ConstructUsing(s => new WCFTest());
                    t.WhenStarted(tc =>tc.OnStart()) ;
                    t.WhenStopped(tc => tc.Stop());
                });

                x.RunAsLocalSystem();
                x.SetDescription("这是一个测试");
                x.SetDisplayName("lalal");
                x.SetServiceName("Testing");
            });
           
        }


 public class WCFTest 
    {
       
        private readonly ServiceHost _host;
        public WCFTest()
        {
            
            _host = new ServiceHost(typeof( WCFForWindows.Service1));
        }
        public  void OnStart()
        {
            _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;
            }
        }

        public  void Stop()
        {
            try
            {
                _host.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
    }

d.安装

 

=======================================================================================================================================

测试:

a.添加引用

 

b.调用

 

 var b = Console.ReadLine();
 var user = new ServiceReference1.Service1Client().GetUserName(Convert.ToInt32(b));
 Console.WriteLine(user);

 

=========================================================================================================

动态生成代理类:

SvcUtil http://128.1.3.198:8086/Common.svc /namespace:*,KennTest /language:C# /d:d:\Kenntest /out:CommonClient.cs /config:App

 

posted @ 2018-04-03 11:13  汪汪汪~~  阅读(587)  评论(0编辑  收藏  举报