Служба WCF (привязка wsHttpBinding) за балансировщиком нагрузки F5 - PullRequest
4 голосов
/ 09 ноября 2010

текущая настройка: - у меня есть служба WCF с wsHttpBding, см. Конфигурацию службы ниже - я реализовал ServiceHostFactory для решения проблемы неправильного расположения схемы и мыльных адресов, изменяя их с имени компьютера на правильное имя хоста сервера -мой тестовый клиент (WCFStorm) я могу сгенерировать прокси, увидеть все методы и успешно их вызвать.- моя среда разработки (клиент-> HTTPS -> служба) работает отлично.

проблемы: - среда prod (клиент -> HTTPS -> F5 -> HTTP -> служба) - моя служба находится за балансировщиком нагрузки F5который разгружает SSL - мой тестовый клиент (WCFStorm) я могу сгенерировать прокси и увидеть все методы, но когда я вызываю любой из методов, я получаю удаленный сервер не найден 404 ошибка

  • мойservice config: <code> <services> <service behaviorConfiguration="Service1Behavior" name="MyService"> <endpoint name="secure" address="" binding="wsHttpBinding" bindingConfiguration="custBinding" contract="IService"/> <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> </service> </services> <bindings> <wsHttpBinding> <binding name="custBinding"> <security mode="Transport"> <transport clientCredentialType="None" /> <message clientCredentialType="None" negotiateServiceCredential="false" establishSecurityContext="false" /> </security> </binding> </wsHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="Service1Behavior"> <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" httpGetUrl="http://myserver/MyService.svc"/> <serviceDebug includeExceptionDetailInFaults="true"/> <dataContractSerializer maxItemsInObjectGraph="6553600" /> </behavior> </serviceBehaviors> </behaviors>

  • обратите внимание, что все мои расположения схемы и мыльные адреса на wsdl верны в prod, но я просто не могу вызвать какие-либо методы.

, пожалуйста, помогите.

Ответы [ 4 ]

3 голосов
/ 10 октября 2012

У нас похожая ситуация, и вот как мы ее заработали.

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

в клиенте - мы изменили http в конфиге на https, а в конфиге basicHttpBindings изменили режим безопасности на Transport с clientCredentialType="None".

Надеюсь, это поможет.

ОБНОВЛЕНИЕ: вскоре я нашел эту статью, обновил конфигурацию, и она заработала. Так что теперь мы используем wsHttpBinding вместо basicHttpBinding. http://blogs.msdn.com/b/morgan/archive/2010/04/15/setting-up-wcf-with-a-load-balancer-using-ssl-in-the-middle.aspx

1 голос
/ 18 января 2013

Проблема с вашей конфигурацией службы заключается в том, что режим безопасности - Transport, где в действительности он должен быть None.Поскольку любые вызовы к вашей службе будут HTTP за балансировщиком нагрузки F5, вы не можете использовать режим безопасности Transport (клиент -> HTTPS -> F5 -> HTTP -> служба).Однако при вызове службы с вашего клиента в конфигурации клиента должен быть Transport режим безопасности, а адрес конечной точки должен иметь HTTPS адрес.

  <wsHttpBinding>
    <binding name="custBinding">
      <security mode="None">
        <transport clientCredentialType="None" />
        <message clientCredentialType="None" negotiateServiceCredential="false" establishSecurityContext="false" />
      </security>
    </binding>
  </wsHttpBinding>
0 голосов
/ 18 января 2013

Мы не смогли добиться этого с помощью балансировки нагрузки на уровне 7 - из службы возвращались различные сообщения об ошибках.Вместо этого он настроен на балансировку нагрузки уровня 4 без проблем.

0 голосов
/ 21 февраля 2011

Это может быть немного поздно для вас, но вот как мы это делаем.После того, как я сгенерировал прокси, я просто изменил http: в конфиге на https.Теперь, если мне придется иногда вызывать его с помощью ssl, а иногда без него, я скопирую раздел конфигурации и присвою копии другое имя, а затем при создании клиента вы можете передать имя конфигурации, иподобрать правильный.

...