0

在 MVC 应用程序中,我有一个为我的开发环境设置的 web.config,并且我有一个需要插入新 WCF 服务端点的转换文件,但是它将它添加到错误的位置,所以我认为我错过了一些东西.

我已经减少了配置文件以仅显示需要的内容。

我有正常的 web.config 如下:

<services>
  <!-- Report Service -->
  <service name="Core.ReportDataHost">
    <endpoint name="ReportDataHost" address="..." binding="customBinding" contract="..."/>
  </service>

  <!-- Authentication Service -->
  <service name="Core.AuthenticationHost">
    <endpoint name="AuthenticationHost" address="..." binding="customBinding" contract="..."/>
  </service>

</services>

然后我有如下转换文件:

<services>

  <service name="Core.AuthenticationHost">
    <endpoint xdt:Transform="Insert" address="" binding="customBinding" contract="..." />
  </service>

</services>

我希望这会在“AuthenticationHost”服务中添加新端点,但它将它添加到第一个服务“ReportDataHost”中。

有什么我想念的想法吗?

4

1 回答 1

1

默认情况下,转换仅使用标签,而不使用属性,因此即使您的转换中有 name="Core.AuthenticationHost" ,它也会被忽略,并且仅使用它找到的第一个服务标签匹配服务标签。

向标签添加一个定位器,<service>以便它知道要使用哪个(而不是只使用第一个)。定位器是标签上的一个属性:xdt:Locator="Match(attribute1,attribute2,...)"。在这种情况下,您希望在name属性上进行匹配。

您更正的变换将如下所示:

<services>
  <service name="Core.AuthenticationHost" xdt:Locator="Match(name)">
    <endpoint xdt:Transform="Insert" address="" binding="customBinding" contract="..." />
  </service>
</services>

更多信息可在MSDN 的转换语法页面上找到

于 2012-07-18T15:05:06.303 回答