• 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();
    
            }
        }
    }


     


     

  • 相关阅读:
    编写第一个Flutter App(翻译)
    在Android上编写模块化项目(翻译)
    Android端生成META-INF信息文件的Gradle插件 RapidMetaInfPlugin
    Sharepoint学习笔记—习题系列--70-576习题解析 --索引目录
    Sharepoint学习笔记—习题系列--70-576习题解析 -(Q147-Q151)
    Sharepoint学习笔记—习题系列--70-576习题解析 -(Q144-Q146)
    Sharepoint学习笔记—习题系列--70-576习题解析 -(Q141-Q143)
    Sharepoint学习笔记—ECM系列—文档列表的Metedata Navigation与Key Filter功能的实现
    Sharepoint学习笔记—ECM系列--文档集(Document Set)的实现
    Sharepoint学习笔记—其它—如何知道某个Sharepoint环境的安装类型
  • 原文地址:https://www.cnblogs.com/FlyCat/p/2579981.html
Copyright © 2020-2023  润新知