【问题标题】:Can you override system.serviceModel configuration section?您可以覆盖 system.serviceModel 配置部分吗?
【发布时间】:2010-12-17 14:07:30
【问题描述】:

我们正在尝试创建一个“代理”类,该类将通过其配置属性为 WCF 服务提供服务。

因为我们无法将这些属性存储在 app.config 文件中,所以我正在寻找一种方法来“代理”它并使用自定义 configurationSection 来根据请求提供所有这些数据。为此,我需要告诉 .NET 框架使用我自己的 ConfigurationSection 加载 system.serviceModel,但我不确定我是否能做到。

如果有人可以批准我的假设,甚至更好,请告诉我如何使用其他来源配置 WCF 设置,这将很有帮助。

谢谢

【问题讨论】:

    标签: .net wcf app-config configurationsection


    【解决方案1】:

    如果您正在寻找在代码中创建和注册 wcf 服务的方法,请查看以下代码以获取示例:

    下面是创建服务宿主对象的方法:

    public static ServiceHost RegisterService<T>(object service, int port, string serviceName)
    {
        // Returns a list of ipaddress configuration
        IPHostEntry ips = Dns.GetHostEntry(Dns.GetHostName());
    
        // Select the first entry. I hope it's this maschines IP
        IPAddress ipAddress = ips.AddressList[0];
    
        // Create the url that is needed to specify where the service should be started
        string urlService = "net.tcp://" + ipAddress.ToString() + String.Format(":{0}/{1}", port, serviceName);
    
        // Instruct the ServiceHost that the type that is used is a ServiceLibrary.service1
        ServiceHost host = new ServiceHost(service);
        // define events if needed
        //host.Opening += new EventHandler(HostOpeningEvent);
        //host.Opened += new EventHandler(HostOpenedEvent);
        //host.Closing += new EventHandler(HostClosingEvent);
        //host.Closed += new EventHandler(HostClosedEvent);
    
        // The binding is where we can choose what transport layer we want to use. HTTP, TCP ect.
        NetTcpBinding tcpBinding = new NetTcpBinding();
        tcpBinding.TransactionFlow = false;
        tcpBinding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
        tcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
        tcpBinding.Security.Mode = SecurityMode.None; 
    
        // Add a endpoint
        host.AddServiceEndpoint(typeof(T), tcpBinding, urlService);
    
        // A channel to describe the service. Used with the proxy scvutil.exe tool
        ServiceMetadataBehavior metadataBehavior;
        metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
        if (metadataBehavior == null)
        {
            string httpURL = "http://" + ipAddress.ToString() + String.Format(":{0}/{1}", port + 1, serviceName);
    
            // This is how I create the proxy object that is generated via the svcutil.exe tool
            metadataBehavior = new ServiceMetadataBehavior();
            metadataBehavior.HttpGetUrl = new Uri(httpURL);
            metadataBehavior.HttpGetEnabled = true;
            metadataBehavior.ToString();
            host.Description.Behaviors.Add(metadataBehavior);
        }
        return host;
    }
    

    你可以这样使用它:

    ServiceHost host = RegisterService<your_service_interface>(your_service, port, "yout_service_name");
    host.Open();
    

    希望这会有所帮助,问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2011-01-07
      • 2015-10-27
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多