Нам были предоставлены внешние SOAP-сервисы, которые мы должны использовать в нашем проекте. Все они предоставляют данные WSDL, но многие из них не являются службами .NET(большинство из них были написаны на Java). Мы создали несколько клиентских прокси с помощью инструмента wsdl.exe. Этот инструмент делает то, что он должен делать, он создает прокси для нас, чтобы потреблять.
Проблема возникает, когда мы пытаемся вызвать методы этих служб с использованием сгенерированных прокси. Мы перехватываем все запросы SOAP для целей ведения журнала, а данные XML отличаются от тех, которые указаны в схеме WSDL.
Например, если поле называется "Имя", наши прокси сериализуют его как "nameField". Я предполагаю, что это связано с тем, что свойство "Имя" использует поле поддержки, называемое "nameField". Услуги с другой стороны, очевидно, не могут интерпретировать это соглашение об именах.
Это не произойдет, если наши прокси-серверы ASMX используют старый XmlSerializer, но по какой-то причине они выбирают DataContractSerializer, что полностью блокирует сериализацию и нарушает совместимость между клиентами и службами.
Мои коллеги прибегают к ручному построению данных XML, а затем отправляют его с классом HttpWebRequest. Я думаю, что это совершенно неприемлемо в 2011 году, это то, для чего предназначена автоматическая генерация прокси.
Мой вопрос: почему это происходит? Почему наши прокси-серверы используют DataContractSerializer и, таким образом, игнорируют все атрибуты сериализации xml в этом процессе? Есть ли способ заставить их снова использовать XmlSerializer?
Мы используем .NET 4.0.