Как заставить автоматически сгенерированный WSDL на двух компьютерах с балансировкой нагрузки совпадать? - PullRequest
4 голосов
/ 15 октября 2010

У нас есть служба WCF, развернутая на двух серверах. Биты точно такие же.

В автоматически сгенерированном WSDL на https://mywebsite.com/SomeService/Soap.svc?wsdl узел <wsdl:types> выводит список XSD в следующем формате:

<xsd:import schemaLocation="https://mywebsite.com/SomeService/Soap.svc?xsd=xsd0" namespace="http://services.mywebsite.com/account" /> 
...
<xsd:import schemaLocation="https://mywebsite.com/SomeService/Soap.svc?xsd=xsd6" namespace="http://schemas.datacontract.org/2004/07/SomeOtherNamespace" />

Это все хорошо, но проблема в том, что порядок XSD различен на каждом сервере с балансировкой нагрузки, даже если они имеют одинаковые биты. Это означает, что XSD на https://mywebsite.com/SomeService/Soap.svc?xsd=xsd0 очень отличается на каждом сервере, и это, очевидно, вызывает проблемы для тех, кто использует службу.

Я знаю, что есть решения для кода, чтобы сгладить WSDL и включить в него все XSD. Однако есть ли какое-то простое решение, чтобы просто заставить WSDL соответствовать? В конце концов, это одинаковые биты на каждой машине.

1 Ответ

2 голосов
/ 26 октября 2010

Сгенерированный XSD отличается, но сообщения одинаковы.Отличаются префиксы и порядки пространства имен в XSD.Если вам нужна только одна версия WSDL, я предлагаю вам отключить балансировку нагрузки для URL-адресов? Wsdl и? Xsd.

Тем не менее, подход «снизу вверх» (код для wsdl) для веб-сервиса определенно не лучшийдля производственной среды.WSDL - это контракт между вами и вашими клиентами, поэтому он не должен создаваться динамически и должен быть исправлен для текущей версии приложения веб-службы.

...