Конечная точка webHttpBinding добавляет пространство имен temuri.org в WSDL, если исключен атрибут bindingNamespace - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть служба WCF, которую необходимо предоставить через конечную точку SOAP (wsHttpBinding) и конечную точку REST (webHttpBinding). Я включил Имена и Пространства имен в соответствующие атрибуты, чтобы помочь в управлении версиями (tempuri.org должен быть полностью исключен из WSDL). По какой-то причине, если я не добавляю атрибут bindingNamepace в конечную точку webHttpBinding, он добавляет пространство имен tempuri.org в WSDL. Пример вывода WSDL ниже.

WSDL без привязкиNamespace -

<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">

WSDL с bindingNamespace -

<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 (отсюда и поведениеConfiguration на конечной точке wsHttpBinding), но без него поведение такое же.

<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 для вывода графа объекта, чтобы посмотреть, смогу ли я его найти. Его там нет.

Кто-нибудь испытывал это раньше? В качестве обходного пути я включу bindingNamespace в конечную точку webHttpBinding, чтобы поддерживать чистоту WSDL, но я хотел бы знать, почему это происходит.

Спасибо!

1 Ответ

3 голосов
/ 27 апреля 2012

Похоже, что BindingNamespace требуется в вашей конфигурации конечной точки для полного удаления пространства имен tempuri.org из вашего WSDL. См. этот пост (пункт 3).

...