.net 自定义行为的配置错误
我创建了一个自定义行为,用于WCF服务,将所有错误记录到应用程序日志中。我已经为行为创建了一个.net 自定义行为的配置错误,.net,wcf,configuration,.net,Wcf,Configuration,我创建了一个自定义行为,用于WCF服务,将所有错误记录到应用程序日志中。我已经为行为创建了一个BehaviorExtensionElement: public ErrorLoggingBehaviorExtensionElement : BehaviorExtensionElement { public ErrorLoggingBehaviorExtensionElement() { } /* - Elements removed for brevity - */ } 我正试
BehaviorExtensionElement
:
public ErrorLoggingBehaviorExtensionElement : BehaviorExtensionElement
{
public ErrorLoggingBehaviorExtensionElement() { }
/* - Elements removed for brevity - */
}
我正试图将此应用于我的配置中,如下所示:
<extensions>
<behaviorExtensions>
<add name="errorLogging"
type="ErrorLoggingBehaviorExtensionElement, Logging, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=56e8273d901d717f"/>
</behaviorExtensions>
</extensions>
<services>
<service name="TestService" behaviorConfiguration="TestServiceBehavior">
<endpoint address=""
binding="wsHttpBinding"
contract="Test_Service.ITestService"/>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="TestServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<errorLogging />
</behavior>
</serviceBehaviors>
</behaviors>
. 为您的眼睛添加了换行符
尝试查看服务页面时,这会生成以下应用程序错误:
为system.serviceModel/behaviors创建配置节处理程序时出错:未为此对象定义无参数构造函数
删除
元素会使错误消失,但我看不出它与报告的错误有什么关系。问题实际上在配置元素的子元素内部
配置属性之一是枚举,用TypeConverterAttribute
修饰以执行从字符串到枚举的转换:
[ConfigurationProperty("level", IsRequired=false)]
[TypeConverter(typeof(EnumConverter))]
public LogLevel Level
{
get { ... }
set { ... }
}
抛出的异常实际上指的是类型EnumConverter
没有无参数构造函数(实际上它需要枚举类型进行转换)
为了解决这个问题,我转而在元素的构造函数中创建ConfigurationProperty
,而不是使用声明性模型。在某个时候,我可能会创建一个EnumConverter
类,以便可以声明性地使用它
这让我花了大约一天的时间才最终解决。在ErrorLoggingBehaviorExtensionElement
中重写CreateBehavior
会返回什么?