1

SlowCheetah で変換しようとしている WCF 構成ファイルがあります。開発用に MEX エンドポイントを含めたいのですが、製品をリリースするときに、これらのエンドポイントは 1 つを除くすべてのサービスで削除する必要があります。残す必要があるサーバーには、次のエンドポイントがあります。

<endpoint address="MEX" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange" />

削除する必要があるのは次のとおりです。

    <endpoint address="net.tcp://computername:8001/WCFAttachmentService/MEX"
                        binding="netTcpBinding"
                        bindingConfiguration="UnsecureNetTcpBinding"
                        name="WCFAttachmentServiceMexEndpoint"
                        contract="IMetadataExchange" />

私が使用している変換は次のとおりです。

<service>
    <endpoint xdt:Locator="Condition(contains(@address, 'MEX') and not(contains(@binding, 'mexHttpBinding')))" xdt:Transform="RemoveAll" />
</service>

ただし、これを実行すると、保持したいものを含むすべての MEX エンドポイントが構成ファイルから削除されます。これを正しく機能させるにはどうすればよいですか?

4

1 に答える 1

0

ノードを選択するLocator 条件式は正しいようです。例に投稿したエンドポイントが 2 つしかない場合、この式は2 番目のエンドポイントを選択します。

ドキュメントによると、Transform属性RemoveAll は「選択した要素または要素を削除する」必要があります。最初の要素が選択されておらず、とにかく削除されたため、投稿した情報に基づいて、期待どおりに機能していません。この StackOverflow の回答に基づいて、問題はCondition. それがバグかどうかはわかりませんが(文書化が不十分です)、いくつかの代替ソリューションを試すことができます:

1)XPathの代わりに使用しConditionます。式の結果として構成ファイルに適用される有効な XPath 式Conditionは次のとおりです。

/services/service/endpoint[contains(@address, 'MEX') and not(contains(@binding, 'mexHttpBinding'))]

の代わりに属性を使用しても、同じ結果が得られるはずです。XPathCondition

<endpoint xdt:Locator="XPath(/services/service/endpoint[contains(@address, 'MEX') 
                             and not(contains(@binding, 'mexHttpBinding'))])" xdt:Transform="RemoveAll" />

2)Matchなどの属性の使用とテストbinding。これはより単純なテストであり、一致を実行するための推奨される方法です。binding削除するノードを属性で選択できます

<endpoint binding="netTcpBinding" xdt:Locator="Match(binding)" xdt:Transform="RemoveAll" />

3)多くの異なるバインディングがあり、そうでないものだけを削除したい場合XPathに代わりに使用します。Match mexHttpBinding

<endpoint xdt:Locator="XPath(/services/service/endpoint[not(@binding='mexHttpBinding'))" xdt:Transform="RemoveAll" />

4) 最後に、いくつかの個別のステートメントをCondition()orで使用して、削除する要素Match()を個別に選択し、代わりにを使用することができます。<endpoint>xdt:Transform="Remove"RemoveAll

于 2014-06-19T05:21:59.307 に答える