Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 自定义行为的配置错误_.net_Wcf_Configuration - Fatal编程技术网

.net 自定义行为的配置错误

.net 自定义行为的配置错误,.net,wcf,configuration,.net,Wcf,Configuration,我创建了一个自定义行为,用于WCF服务,将所有错误记录到应用程序日志中。我已经为行为创建了一个BehaviorExtensionElement: public ErrorLoggingBehaviorExtensionElement : BehaviorExtensionElement { public ErrorLoggingBehaviorExtensionElement() { } /* - Elements removed for brevity - */ } 我正试

我创建了一个自定义行为,用于WCF服务,将所有错误记录到应用程序日志中。我已经为行为创建了一个
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
会返回什么?