Не удается отправить запрос службы WCF в виде SOAP + XML - PullRequest
0 голосов
/ 31 мая 2011

Используя Visual Studio 2010, я разработал службу WCF, размещенную в веб-приложении, для использования третьей стороной.Они говорят мне, что они не могут вызвать это.Для тестирования они перенаправили меня на Altova XmlSpy и указали, что при создании нового запроса SOAP, если они выбирают «Отправить как SOAP + XML (SOAP 1.2)» в пункте меню «Изменить параметры запроса SOAP», они получаютследующие два диалоговых окна с предупреждением:

HTTP error: could not POST file ‘/TurniArc/WebServices/Processi.svc’ on server ’10.51.0.108’ (415)

Error sending the soap data to ‘http://10.51.0.108/TurniArc/WebServices/Processi.svc’ HTTP error: could not POST file ‘/TurniArc/WebServices/Processi.svc’ on server ’10.51.0.108’ (415)

Я действительно это подтвердил.Если этот флажок не установлен, запрос будет отправлен как требуется.И у меня никогда не возникало проблем с вызовом моего веб-сервиса с помощью soapUI, программного обеспечения, которое я всегда использовал для внутреннего тестирования.

Это первый веб-сервис, который я создаю, начиная без каких-либо теоретических знаний (но, думаю, все:-)), так что я даже не уверен, куда ковыряться, чтобы это исправить.Может ли проблема заключаться в привязке?Я создал сервис, используя Add / New Item / WCF Service и оставив все параметры по умолчанию, поэтому он должен быть BasicHttpBinding

Это часть serviceModel моего web.config

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
<!--other bindings related to proxies to other services I'm invoking -->
</system.serviceModel>

Myинтерфейс имеет только атрибут

[ServiceContract(Namespace="http://www.archinet.it/HRSuite/Processi/")]

, а реализующий его класс имеет атрибуты

[ServiceBehavior(IncludeExceptionDetailInFaults = true, Namespace = "http://www.archinet.it/HRSuite/Processi/")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Спасибо

Редактировать : третья сторона использует промежуточное ПО Oracle SOA

1 Ответ

2 голосов
/ 31 мая 2011

BasicHttpBinding использует SOAP 1.1, поэтому вы не можете отправить запрос в SOAP 1.2 на конечную точку, используя эту привязку. Код состояния HTTP 415 означает неподдерживаемый тип мультимедиа, что также подразумевает это, поскольку SOAP 1.1 использует тип содержимого text / xml, тогда как SOAP 1.2 использует тип содержимого application / soap + xml.

Если вы хотите, чтобы BasicHttpBinding был эквивалентен SOAP 1.2 без каких-либо других вещей WS- *, включенных в WsHttpBinding, вам необходимо создать пользовательскую привязку. Самая простая версия выглядит так:

<bindings>
  <customBinding>
    <binding name="soap12">
      <textMessageEncoding messageVersion="Soap12" />
      <httpTransport />
    </binding>
  </customBinding>
</bindings>

Затем вы должны вручную определить конечную точку для вашего сервиса (в данный момент вы используете конечную точку по умолчанию):

<services>
  <service name="YourNamespace.YourServiceClass">
    <endpoint address="" binding="customBinding" bindingConfiguration="soap12" 
              contract="YourNamespace.YourServiceContractInterface" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>

В любом случае, я не верю, что перенастройка версии SOAP для использования вашей службы в промежуточном программном обеспечении Oracle SOA занимает более нескольких минут.

...