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

View Code
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服务托管完整例子:

View Code
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();



        }

    }

}

 


 


 

你可能感兴趣的:(配置文件)