gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:31:26 25 4
gpt4 key购买 nike

我创建了一个与 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>

注意:行为注册元素上的“type”属性实际上在我的配置文件中位于一行以克服 this known issue .为您的眼睛添加了换行符。

这会在尝试查看服务页面时产生以下应用程序错误:

An error occurred creating the configuration section handler for system.serviceModel/behaviors: No parameterless constructor defined for this object.

删除 <errorLogging />元素使错误消失,但我看不出它与报告的错误有何关系。

最佳答案

问题实际上深藏在配置元素的子元素中。

其中一个配置属性是枚举,用 TypeConverterAttribute 修饰执行从字符串到枚举的转换:

[ConfigurationProperty("level", IsRequired=false)]
[TypeConverter(typeof(EnumConverter))]
public LogLevel Level
{
get { ... }
set { ... }
}

抛出的异常其实是指类型EnumConverter没有无参数构造函数(实际上它需要枚举类型来回转换)。

为了解决这个问题,我转而创建 ConfigurationProperty在元素的构造函数中,而不是使用声明性模型。在某些时候,我可能会创建一个 EnumConverter<T>类,以便可以以声明方式使用它。

这让我花了大约一天的时间才最终解决问题。

关于.net - 自定义行为的配置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3659844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com