Конечная точка SOAP через HTTPS возвращает 400 неверных запросов - PullRequest
1 голос
/ 10 мая 2011

У меня есть служба WCF, размещенная в IIS, за балансировщиком нагрузки. SSL выгружается на LB, а затем служба вызывается в виде простого HTTP.

Я получил конечную точку REST службы, но я не могу заставить конечную точку SOAP отображать страницу wsdl. При вызове https://domain/Service.svc/soap?wsdl браузер получает ответ на запрос 400 бар. Я также проверил svclog, и ошибка - There is a problem with the XML that was received from the network. See inner exception for more details., что означает, что он ожидал, что я сделаю POST вместо GET и отправлю XML поверх.

Фрагменты из конфигов:

<bindings>
    <basicHttpBinding>
        <binding name="basicBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <security mode="Transport"></security>
          <readerQuotas maxStringContentLength="2147483647" />
        </binding>
    </basicHttpBinding>
    <webHttpBinding>
        <binding name="webBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
            <security mode="Transport"></security>
        </binding>
   </webHttpBinding>
</bindings>

<services>
    <service behaviorConfiguration="MyServiceBehavior" name="Namespace.Service">
        <endpoint address="" behaviorConfiguration="MyRESTBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" name="REST" contract="Namespace.IService" />
        <endpoint address="https://domain/Service.svc/soap" binding="basicHttpBinding" bindingConfiguration="basicBinding" name="SOAP" contract="Namespace.IService" />
    </service>
</services>

<behaviors>
    <serviceBehaviors>
        <behavior name="MyServiceBehavior">
            <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="true"/>
            <dataContractSerializer maxItemsInObjectGraph="6553600" />
        </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
        <behavior name="MyRESTBehavior">
            <webHttp/>
        </behavior>
    </endpointBehaviors>
</behaviors>

Я тоже пытался использовать wsHttpBinding, но единственным другим результатом было получение 401 s. Любые направления приветствуются.

Ответы [ 2 ]

0 голосов
/ 16 мая 2011

Я нашел это.Ранее я удалил атрибут httpsGetUrl из serviceMetadata, поскольку дважды получал сообщение об ошибке при публикации службы.Теперь я думаю, что ошибка, вероятно, произошла из-за опечатки, и я не должен был удалять httpsGetUrl.Изменение раздела behaviors на следующий решило мою проблему:

<behaviors>
    <serviceBehaviors>
        <behavior name="MyServiceBehavior">
            <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" httpsGetUrl="https://domain/Service.svc/soap" />
            <serviceDebug includeExceptionDetailInFaults="true"/>
            <dataContractSerializer maxItemsInObjectGraph="6553600" />
        </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
        <behavior name="MyRESTBehavior">
            <webHttp/>
        </behavior>
    </endpointBehaviors>
</behaviors>
0 голосов
/ 10 мая 2011

Не думаю, что вы можете использовать абсолютный адрес для конечной точки basicHttpBinding.Попробуйте вместо этого:

<endpoint address="soap" binding="basicHttpBinding" bindingConfiguration=...

Чтобы получить доступ к WSDL, ваш URL должен выглядеть примерно так: «https://domain/soap/Service.svc?wsdl". С IIS & WCF вы не можете переопределить URL виртуального каталога. Значение адреса конечной точкидолжно быть относительно URL сайта.

...