2014-12-05 30 views
0

我有多个WCF服务托管在IIS中,我正在应用相同的自定义服务行为。我正在寻找一种方法来通过配置将行为传递给行为,例如在behaviorExtensions或行为元素中。有没有办法通过配置将参数传递给自定义服务行为

如果有帮助,我还加入了自定义消息督察ApplyDispatchBehavior,所以我需要传递参数给检查员:

public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) 
{ 
    foreach (ChannelDispatcher channelDispatcher in serviceHostBase.ChannelDispatchers) 
    { 
     foreach (EndpointDispatcher endpointDispatcher in channelDispatcher.Endpoints) 
     { 
      endpointDispatcher.DispatchRuntime.MessageInspectors.Add(
        new ValidatingMessageInspector(<custom parameters>)); 
     } 
    } 
} 
+2

只需在web.config中创建一个配置节并使参数有效?如果是这样,你可以在那里读取配置并应用它,或者如果参数是基本的,甚至可以使用appSettings。 – 2014-12-06 00:23:53

+0

谢谢@PabloRomeo。这看起来是唯一的方法,所以我会接受它作为答案。复杂的是配置参数因服务而异,所以行为需要读取特定于该服务的配置。 – 2014-12-08 14:09:19

回答

0

只想创建与参数在web.config中配置节有效吗?如果是这样,你可以在那里读取配置并应用它,或者如果参数是基本的,甚至可以使用appSettings。

举例来说,如果你有基本类型的几个参数,也许一个简单的方法可以是:

<appSettings> 
    <add key="Shared.CommonParameter" value="A value" /> 
    <add key="Service1.OneParameter" value="False" /> 
    <add key="Service1.AnotherParameter" value="Some Value" /> 
    <add key="Service2.ADifferentParameter" value="42" /> 
</appSettings> 

这样,它会很容易区分哪些设置属于哪个服务(注意服务名称前缀在关键字中),并且如果需要也具有一些共享参数。

如果你需要的东西在结构上更为复杂,你可能想看看定义每个服务自定义配置节,为如下所示:http://msdn.microsoft.com/en-us/library/2tw134k3%28v=vs.140%29.aspx

但可能是矫枉过正,根据您的需求和预期的灵活性。

相关问题