【问题标题】:Web.Config transformation - section with namespace not being transformedWeb.Config 转换 - 未转换命名空间的部分
【发布时间】:2021-07-08 11:53:05
【问题描述】:

我在 ASP.Net WCF .Net Framework 4.0 上有一个 web.config,我根据构建环境进行了转换。

问题是我的 system.serviceModel 部分中有一个诊断部分。在基础 web.config 上,这是空的:

<diagnostics></diagnostics>

然后在我的转换中,我们应用包含命名空间的过滤器,如下所示:

<diagnostics performanceCounters="All" xdt:Transform="Replace">
   <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="300000" maxSizeOfMessageToLog="200000000">
     <filters>
       <add xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">/s:Envelope/s:Header/a:Action[contains(.,'IMyService')]</add>
     </filters>
   </messageLogging>
 </diagnostics>

当应用转换时(xdt:Transform="Replace"),我得到这个:

<diagnostics performanceCounters="All">
 <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"
 maxMessagesToLog="300000" maxSizeOfMessageToLog="200000000">
 <filters>
 <add>/s:Envelope/s:Header/a:Action[contains(.,'IMyService')]</add>
 </filters>
 </messageLogging>
 </diagnostics>

这会导致 web.config 出现 Xml 错误,无法正常工作。

所以目标是在转换后,命名空间声明将出现在每个“add”元素上。我尝试在配置级别声明命名空间但未成功...

继续,这是过滤器上的当前输出:

<add>/s:Envelope/s:Header/a:Action[contains(.,'IMyService')]</add>

我们希望它是这样的:

<add xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">/s:Envelope/s:Header/a:Action[contains(.,'IMyService')]</add>

我该如何克服这个问题?

【问题讨论】:

标签: wcf


【解决方案1】:

我无法找到合适的解决方案,即使之前声明命名空间也不起作用...

我们最终得到了每个环境的整个 web.config 而不是转换,然后在发布时选择适当的一个并将其假定为正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    相关资源
    最近更新 更多