WCF服务控制台托管方法(不使用配置文件)

来源:互联网 发布:js 重置select 编辑:程序博客网 时间:2024/04/30 06:59
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();        }    }}


 


 

原创粉丝点击