2009-11-18 48 views
1

我想用自己的处理程序替换“客户端”处理程序的默认machine.config设置,但是,当我运行它时,我得到这个错误:替换客户端部分不起作用(system.serviceModel)

“部分或组名'client'已经被定义,更新可能只发生在它定义的配置级别。”

,这里是我的app.config看起来像:

<configuration> 
    <configSections> 
    <remove name="client"/> 
    <sectionGroup name="system.serviceModel" type="System.ServiceModel.Configuration.ServiceModelSectionGroup, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="client" type="xyz.Messaging.CustomClientSection, Point.Messaging" /> 
    </sectionGroup> 
    </configSections> 

请让我知道如果你有任何想法,为什么好像它不删除此部分(如人们所期望的),并给出我改为这个错误。

谢谢。

回答

0

AFAIK,你不能这样做。 <client>子部分通过其Client propertyServiceModelSectionGroup紧密联系。

+0

为什么不呢?我看到你可以替换其他的machine.config部分,它说我无法替换它,并设置另一个配置元素,它会列出你的端点?如果是这样的话,有没有什么办法可以从另一个来源“代理”这些值(由于某些限制,我不能将它放在我的app.config中)。 谢谢 – 2009-11-19 00:17:02

+0

如果你在你的问题中解释了你想要完成的是什么,这可能会更好,所以我们可以提出建议,告诉你如何解决问题。 – 2009-11-19 00:30:53

+0

首先非常感谢你。我们遇到的问题与我们可以将WCF频道信息存储在app.config中(出于某些部署原因)有关。因此,我想通过实现configurationSection模型创建一个“代理”类来提供这些值(从另一个资源获取),然后用我自己的实现“覆盖”“客户端”(也是服务)子配置这些值给WCF服务(与TIBCO一起使用)。 如果你有更好的主意,请让我知道。 – 2009-11-19 05:08:01

0

你可以做到这一点,但你必须删除并重新添加整个system.serviceModel部分。我认为你不能挑选出“客户”这一小节。

<configuration> 
    <configSections> 
    <remove name="system.serviceModel"/> 
    <sectionGroup name="system.serviceModel" type="System.ServiceModel.Configuration.ServiceModelSectionGroup, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="client" type="xyz.Messaging.CustomClientSection, Point.Messaging" /> 
    </sectionGroup> 
    </configSections> 
    ... 
</configuration> 

这当然会有点工作。希望这有帮助,但我有一种感觉,你不会喜欢这个答案。

这可以用于去除款工作的唯一方法是,如果一个sectionGroup元素支持的<remove>元素,它不会:http://msdn.microsoft.com/en-us/library/ms228114.aspx

希望这是有帮助的。