WCF Interop с PHP за балансировщиком нагрузки - PullRequest
2 голосов
/ 02 ноября 2009

Я пытаюсь помочь клиенту взаимодействовать с клиентом PHP, но у нас есть балансировщик нагрузки, который находится перед фермой IIS. Из-за этого, когда вы на самом деле просматриваете .svc? Wsdl, вы получаете определенный сервер, указанный в этом WSDL. Затем, когда мой клиент пытается сгенерировать клиента, используя что-то вроде этого

$client = new SupplierService();

Они получают тайм-аут для определенного сервера в ферме (не тот адрес, который мы им дали, который указывает на сам балансировщик нагрузки)

Я даже сплющил WSDL вручную, сгенерировал .net-клиента с помощью svcutil, чтобы доказать, что этого WSDL должно быть достаточно для получения действительного вызова через балансировщик нагрузки (и .net-клиент работает, используя этот плоский сгенерированный WSDL-клиент )

После того, как я получил эту работу, я отправил клиенту по электронной почте этот плоский файл WSDL, чтобы сгенерировать из него действительный php-клиент (а не uri, который вызывал проблемы), и он просто завис. Без сообщения об ошибке или исключения, чтобы перейти от ...

Также, когда я наблюдаю фактическое сообщение, полученное с помощью Wireshark, данные SOAP клиента .net и php выглядят почти одинаково. все же клиент .net работает и клиент php зависает без ошибок, возвращенных клиенту или зарегистрированных через .NET

Что-нибудь, что я мог здесь упустить или о чем следует знать при взаимодействии с WCF за балансировщиком нагрузки?

Ответы [ 2 ]

1 голос
/ 02 ноября 2009

В ситуациях, когда вы сбалансированы за балансировщиком, как это, если вы хотите, чтобы в WSDL было указано правильное имя сервера, вам нужно добавить раздел <host> в конфигурацию вашей службы следующим образом:

<service ...>
    <host>
        <baseAddresses>
            <add baseAddress="http://subdomain.yourexternaldns.com" />
            <add baseAddress="https://subbomain.yourexternaldns.com" />
        </baseAddresses>
    </host>
</service>

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

0 голосов
/ 02 ноября 2009

Есть несколько вещей, которые вы можете попробовать:

  • Протестируйте php-клиент непосредственно со службой, чтобы проверить, является ли балансировщик нагрузки проблемой.
  • Проверьте IIS и журналы событий на компьютере, на котором запущена служба WCF
...