0

SOAPエンドポイント(wsHttpBinding)とRESTエンドポイント(webHttpBinding)を介して公開する必要があるWCFサービスがあります。バージョン管理を支援するために、関連する属性に名前と名前空間を含めました(tempuri.orgはWSDLから完全に削除する必要があります)。何らかの理由で、webHttpBindingエンドポイントにbindingNamepace属性を追加しないと、WSDLにtempuri.org名前空間が追加されます。WSDL出力の例を以下に示します。

bindingNamespaceのないWSDL-

<wsdl:definitions name="State" targetNamespace="http://example.com/services/masterdat/state/2012/02/05" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
xmlns:tns="http://example.com/services/masterdata/state/2012/02/05" 
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
xmlns:i0="http://tempuri.org/"
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" 
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" 
xmlns:wsa10="http://www.w3.org/2005/08/addressing" 
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" 
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">

bindingNamespaceを使用したWSDL-

<wsdl:definitions name="State" targetNamespace="http://example.com/services/masterdata/state/2012/02/05" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
xmlns:tns="http://example.com/services/masterdata/state/2012/02/05" 
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" 
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" 
xmlns:wsa10="http://www.w3.org/2005/08/addressing" 
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" 
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">

これがエンドポイントのweb.Configです。WCFExtrasを使用してWSDLをフラット化します(したがって、wsHttpBindingエンドポイントのbehaviorConfiguration)が、それがなくても動作は同じです。

<services>
  <service name="MasterDataExample.Services.StateService">
    <!--  bindingConfiguration="defaultWsBinding" -->
    <endpoint address="soap"
              behaviorConfiguration="flatWsdl"
              binding="wsHttpBinding"
              bindingNamespace="http://example.com/services/masterdata/state/2012/02/05"
              contract="MasterDataExample.Services.IStateService" 
              name="soap" />
    <!--  -->
    <endpoint address="json"
              behaviorConfiguration="json"
              binding="webHttpBinding"
              bindingNamespace="http://example.com/services/masterdata/state/2012/02/05"
              contract="MasterDataExample.Services.IStateService" 
              name="ajax" />
  </service>
</services>

ソリューションにWCFExtrasをロードし、WsdlExporterを調べて、tempuri.orgの言及が成功しないかどうかを確認しました。また、XSharper.Coreを使用してオブジェクトグラフをダンプし、それが見つかるかどうかを確認しました。ありません。

誰かがこれを以前に経験したことがありますか?回避策として、WSDLをクリーンに保つためにwebHttpBindingエンドポイントにbindingNamespaceを含めますが、これが発生する理由を知りたいと思います。

ありがとう!

4

1 に答える 1

3

tempuri.org名前空間をWSDLから完全に削除するには、エンドポイント構成でBindingNamespaceが必要なようです。この投稿(項目3)を参照してください。

于 2012-04-27T18:51:29.457 に答える