WCF服务控制台托管方法(不使用配置文件)
2012-04-29 23:55
686 查看
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Description; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(ChatService), new Uri("http://localhost:8000/WCFServerLibrary/Service1/"), new Uri("net.tcp://localhost:8888/WCFServerLibrary/Service1/"))) { WSHttpBinding wsbinding = new WSHttpBinding(); wsbinding.Name = "NoneSecurity"; wsbinding.MaxBufferPoolSize = 12000000; wsbinding.MaxReceivedMessageSize = 12000000; wsbinding.UseDefaultWebProxy = false; WSHttpSecurity security = new WSHttpSecurity(); security.Mode = SecurityMode.None; wsbinding.Security = security; //wshttp绑定 ServiceEndpoint sed = host.AddServiceEndpoint(typeof(IChatService), wsbinding, ""); //设置IService1的ServiceContract特性的SessionMode sed.Contract.SessionMode = SessionMode.Allowed; ServiceBehaviorAttribute behaviorAttr = host.Description.Behaviors.Find<ServiceBehaviorAttribute>(); if (behaviorAttr == null) { behaviorAttr = new ServiceBehaviorAttribute(); } //设置服务类Service1的ServiceBehavior特性的ConcurrencyMode和InstanceContextMode behaviorAttr.ConcurrencyMode = ConcurrencyMode.Single; behaviorAttr.InstanceContextMode = InstanceContextMode.PerCall; //tcp绑定 NetTcpBinding myBinding = new NetTcpBinding(); myBinding.Security.Mode = SecurityMode.None; myBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None; host.AddServiceEndpoint(typeof(IChatService), myBinding, ""); //元数据mex绑定 ServiceMetadataBehavior behavior = new ServiceMetadataBehavior(); host.Description.Behaviors.Add(behavior); host.AddServiceEndpoint(typeof(IMetadataExchange),MetadataExchangeBindings.CreateMexHttpBinding(), "mex"); host.Open(); Console.WriteLine("ConsoleHost 服务开启……"); Console.ReadLine(); } } } }
其中ChatService是服务实例,IChatService是服务契约,可自定义
启动后在http://localhost:8000/WCFServerLibrary/Service1/mex可导入服务
TCP服务托管完整例子:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Description; using ConsoleApplicationWCF.ServiceReference1; namespace ConsoleApplicationWCF { [ServiceContract] public interface IGetIdentity { [OperationContract] string Get(string ClientIdentity); } public class GetIdentity : IGetIdentity { public string Get(string ClientIdentity) { return ("客户端Identity是 '" + ClientIdentity + "'"); } } class Program { static void Main(string[] args) { NetTcpBinding myBinding = new NetTcpBinding(); myBinding.Security.Mode = SecurityMode.None; myBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None; Uri baseAddress = new Uri("net.tcp://localhost:8056/WCFService/"); var myServiceHost = new ServiceHost(typeof(GetIdentity), baseAddress); ServiceEndpoint myServiceEndpoint = myServiceHost.AddServiceEndpoint (typeof(IGetIdentity), myBinding, "GetIdentity"); ServiceMetadataBehavior behavior = new ServiceMetadataBehavior(); behavior.HttpGetEnabled = true; behavior.HttpGetUrl = new Uri("http://localhost:8057/mex"); myServiceHost.Description.Behaviors.Add(behavior); myServiceHost.Open(); Console.WriteLine("Service started!"); Console.ReadLine(); myServiceHost.Close(); } } }
相关文章推荐
- WCF服务控制台托管方法(不使用配置文件)
- WCF :通过配置文件来托管服务
- WCF系列(一) -- 完全不使用配置文件构建和使用WCF服务
- 完全不使用配置文件构建和使用WCF服务(转)
- WCF步步为营(三):使用配置文件改变使用服务的方式
- WCF系列(二) -- 使用配置文件构建和使用WCF服务
- WCF系列(一) -- 完全不使用配置文件构建和使用WCF服务【转】
- WCF系列(一) -- 完全不使用配置文件构建和使用WCF服务
- WCF :通过配置文件来托管服务
- WCF系列(二) -- 使用配置文件构建和使用WCF服务
- WCF系列(二) -- 使用配置文件构建和使用WCF服务 【转】
- WCF系列(二) -- 使用配置文件构建和使用WCF服务
- WCF步步为营(二):使用配置文件改变发布服务的方式
- COM(VB/VBA/Script)利用服务标记调用WCF服务之四:使用配置文件
- WCF系列(一) -- 完全不使用配置文件构建和使用WCF服务
- WCF系列(二) -- 使用配置文件构建和使用WCF服务
- 完全不使用配置文件构建和使用WCF服务
- WCF系列(二) -- 使用配置文件构建和使用WCF服务
- 完全不使用配置文件构建和使用WCF服务
- WCF系列(二) -- 使用配置文件构建和使用WCF服务