Проблемы с перегрузкой пустот / добавлением дополнительных параметров в веб-сервис - PullRequest
1 голос
/ 10 ноября 2011

Мы уже давно решаем эту проблему и находим только половину полезных решений.

Наш основной метод в приложении веб-службы, называемый "MainVoid", должен иметь дополнительный параметр, например:

MainVoid (до):

 public void MainVoid (string Parameter1, int Parameter2, bool Parameter 3)

Into (MainVoid (до))):

public void Main Void (string Parameter1, int Parameter2, bool Parameter 3, int Parameter4)

У нас есть несколько приложений, которые использовали эту пустоту, но мы не хотим перестраивать / переиздавать все.Идеальным сценарием было бы то, что старые приложения вызывали бы void с одним параметром меньше, тогда как «новые» приложения могли бы иметь то же значение void, но с одним параметром больше.

Как я знаю, к сожалению, использование необязательных параметров невозможно вWCF, который является довольно большой проблемой.

Затем мы попытались перегрузить функции ниже

[OperationContract]

С похожим подходом к этому: методы перегрузки в веб-сервисе

Отладка веб-службы работает нормально (если параметр не передается, то вставляется значение по умолчанию для необязательного параметра).В другом проекте, который вызывает WebService, Intellisense находит перегруженные методы (он предлагает 2 варианта вместо одного).

Но когда мы запускаем debug в приложении, которое вызывает веб-сервис, отладчик хочет все параметры, поэтому он выдаетошибка.

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

Угадаете, что нет другого способа, кроме создания 2 пустот с другим именем?

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Использование разных имен будет, по крайней мере, понятнее ИМО. Перегрузка имеет достаточно странностей даже в простом C #, без каких-либо дополнительных параметров или битов веб-службы.

Другой альтернативой является изменение веб-службы для использования пользовательского типа параметра и добавление дополнительной информации к этому типу параметра с течением времени.

0 голосов
/ 10 ноября 2011

Как насчет определения нового параметра как типа данных, допускающего обнуление (т. Е. int?), и проверки на Parameter4 == null или Parameter4.HasValue в реализации метода?

Тогда вам потребуется только один метод.

...