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