【问题标题】:How do I pass parameters to a ServiceHost如何将参数传递给 ServiceHost
【发布时间】:2012-12-21 18:59:30
【问题描述】:

我正在做以下事情

 //Define the service host
        this._smeediPluginServiceHost = new ServiceHost(typeof(SmeediServiceHost), smeediServiceUri);
        this._smeediPluginServiceHost.AddServiceEndpoint(typeof(ISmeediServiceHost), GetBinding(), smeediServiceUri);
        SetupAndStartWebService(_smeediPluginServiceHost); 


  private void SetupAndStartWebService(ServiceHost serviceHost, ServiceDiscoveryBehavior serviceDiscoveryBehavior = null)
    {
        //Define service behaviours
        ServiceMetadataBehavior serviceMetadataBehavior = new ServiceMetadataBehavior();
        serviceMetadataBehavior.HttpGetEnabled = true;

        //Add the behaviours to the service
        serviceHost.Description.Behaviors.Add(serviceMetadataBehavior);

        if (serviceDiscoveryBehavior != null)
            serviceHost.Description.Behaviors.Add(serviceDiscoveryBehavior);

        serviceHost.Open();
    }  

我需要将参数传递给服务,但我不知道如何。我看过How do I pass values to the constructor on my wcf service?,但无法理解它。谢谢

【问题讨论】:

  • 您可以在服务本身中使用 ConfigurationManager.AppSettings[] 从 app.config 文件中读取,而不是传递给构造函数吗?

标签: wcf service parameters servicehost


【解决方案1】:

如果我理解正确,您希望将参数传递给服务实现类的构造函数。你可以通过passing an instance of the service class to the ServiceHost constructor 来代替它的类型。那就是:

// Create the service instance
var instance = new SmeediServiceHost("some parameters");

// Define the service host using the above instance
this._smeediPluginServiceHost = new ServiceHost(instance, smeediServiceUri);

注意 - 使用这种方法意味着您使用的是服务类的单例实例。如果您需要每个会话或每个请求的新实例,请考虑使用ServiceHostFactory,如this answer 中所述。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-08-09
  • 2020-10-09
  • 2012-01-07
  • 2014-05-03
  • 2015-06-26
  • 2012-01-18
  • 2017-07-14
  • 2018-03-08
相关资源
最近更新 更多