如何将参数传递给 ServiceHost
Posted
技术标签:
【中文标题】如何将参数传递给 ServiceHost【英文标题】:How do I pass parameters to a 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 文件中读取,而不是传递给构造函数吗? 【参考方案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 中所述。
【讨论】:
+1。另外,有用的文章:WCF Service Instancing以上是关于如何将参数传递给 ServiceHost的主要内容,如果未能解决你的问题,请参考以下文章
如何将传递给我的 bash 脚本的所有参数传递给我的函数? [复制]
如何使用 SwiftUI 将参数传递给 Button 的操作