#c# #java #service #wsdl
#c# #java #Обслуживание #wsdl
Вопрос:
Сначала позвольте мне сказать, что это не идеальная ситуация. У меня нет копии оригинального WSDL, чтобы определить, что изменилось; Я также работаю с разработчиками через стену, которые не могут помочь. Мое приложение разработано в Visual Studio 2010, использующее конечную точку службы, написанную на Java.
У меня есть приложение на C #, у которого есть ссылка на службу, я буду называть его произвольным виджетом. Виджет имеет метод DoWork, который принимает четыре аргумента: argument01, argument02, argument03 и argument04.
Сигнатура метода моего сгенерированного кода на C # такова
public DoWorkResponse DoWork(string argument01, int argument02, bool argument03, int argument04)
Недавно был добавлен новый метод, и мне сказали обновить мою ссылку. Когда я это сделал, моя подпись изменилась с приведенной выше на:
public DoWorkResponse DoWork(DoWork DoWork1)
где DoWork
partial class DoWork
{
string argument01;
int argument02;
bool argument03;
int argument04;
}
Мне жаль, что я не могу предоставить исходный код, но, как большинство из вас может понять, это невозможно.
Итак, в основном я ищу некоторое представление о том, что могло измениться на стороне Java, чтобы заставить Visual Studio генерировать иначе, чем раньше.
Заранее спасибо!
Комментарии:
1. Похоже
DoWork
, что метод был переработан одновременно с добавлением нового метода.2.Это была и моя мысль, но разработчик, который изначально написал конечную точку, больше не работает в штате, а назначенный ему боится вникать в это, опасаясь взлома черного ящика. Я почти уверен, что это часть wsdl, которая вызывает проблемы.
<xs:element name="DoWork">
<xs:complexType>
<xs:sequence>
3. @clichekiller Вы говорите, что могло измениться на стороне Java, чтобы заставить Visual Studio генерировать иначе, чем раньше . В этом нет «might»; в какой-то момент сигнатура метода, предоставленного службой, была изменена, и служба была перекомпилирована / перераспределена. Это изменение могло произойти до добавления нового метода, но оно не было развернуто на сервере до недавних изменений.
Ответ №1:
Возможно parameterStyle
, элемент аннотации SOAPBinding был изменен, сделав стиль параметра пустым, а не обернутым. Они могли бы попробовать добавить это в свое определение службы:
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
Возможно, их версия SOAP также изменилась. Я не эксперт в веб-службах Java, но это обсуждение является информативным как для веб-служб SOAP, так и для Java.
Если они не могут или не хотят вносить эти изменения со своей стороны, вы можете иметь некоторый контроль над привязками на стороне клиента. См. Раздел Поддержка форматов SOAP в .NET Framework. В принципе, вы можете создавать свои классы из WSDL, используя дополнительные параметры командной строки с wsdl.exe .
С другой стороны, разве у них нет управления версиями в их исходном коде? Конечно, их история будет отражать, какие изменения они внесли в свою службу или параметры.
Комментарии:
1. Я был бы удивлен, если бы на их стороне не было контроля версий, вероятно, subversion, но у меня нет к нему доступа, и они, к сожалению, не появятся. Это просто расстраивает, потому что это не первый раз, когда у меня менялись контракты. Я всегда думал о wsdl как о контрактах, их можно было расширять, но их нельзя было изменять; здесь не так много, но вы знаете, как это происходит. Спасибо за понимание.