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

Если мой контракт выглядит следующим образом:

[OperationContract]
void DoSomething(int id, out string moreInfo);

это в конечном итоге выглядит как:

string DoSomething(int id);

когда вы импортируете ссылку на веб-сервис. Можно ли повлиять на автоматическое преобразование порядка параметров? Уже было удивительно найти все исходящие параметры в начале сигнатуры функции, но это все еще работало, но мы хотели, чтобы void-методы продолжали быть void-методами. Или это ограничение SOAP?

 Adam Houldsworth02 июл. 2012 г., 16:12
@Abel Лично я бы только создал возврат по контракту, который содержал бы статус и упаковывал данные вместе с ним. Я склонен избегать возможностей C # при создании методов веб-сервиса. Насколько мне известно, любые параметры, которые вы получаете на экране создания ссылок, являются единственными доступными параметрами для управления генерацией прокси.
 Adam Houldsworth02 июл. 2012 г., 15:50
В этом случае пустой метод с однимout Параметр фактически является не пустым методом с правильным возвращаемым значением. Что значит определитьout Параметр дает вам, что не-out версия не?
 MattDavey02 июл. 2012 г., 16:10
Я на самом деле очень удивлен и впечатлен тем, что WCF вообще смог сгенерировать прокси для этой операции! Каково обоснование использованияout параметр на первом месте?
 Abel02 июл. 2012 г., 16:27
@MattDavey нередко иметь out-параметры. Это не только C # -функция, она еще более распространена в других языках (C ++ для одного), и в IDL это очень нормально иметь[in], [out] а также[in, out] параметры. Сценарий использования / причина обычно заключается в том, что вам нужно несколько несвязанных возвращаемых значений, в данном случае это статус и набор результатов.
 Abel02 июл. 2012 г., 16:10
@ AdamHouldsworth ортогональность в дизайне веб-сервисов. Первоначально у нас были услуги, которые возвращали значение, а те, которые не имели. Тем не менее, каждый сервис был реорганизован для возврата статусов. При форсировании дополнительного параметра сборка автоматически завершится неудачей, и мы знаем, что и где исправить, плюс то, что просто удобно всегда знать, что первый параметр является дополнительным параметром, который содержит статусы, независимо от остальной части контракта.

Ответы на вопрос(1)

Решение Вопроса

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/48b5992f-f7bd-4b67-8299-514d1780fa9a

WSDL does not show the original method signature; instead, it shows the input parameters as a group and the output parameters as another group.

Ограничение невозможности отделить возвращаемые значения от выходных параметров в WSDL. Но это будет означать, что ограничение метода void будет частью svcutil.exe, я думаю. Нет никаких причин, по которым не может быть переключателя svcutil, чтобы не переводить первый вывод в возвращаемое значение, но это был бы запрос на функцию в ms connect.

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

 02 июл. 2012 г., 18:27
Хорошая идея по типу VoidResponse.
 Abel02 июл. 2012 г., 17:07
Я столкнулся с той же ссылкой несколько минут назад. На самом деле, похоже, это ограничение лежащего в основе WSDL. Оболочка, конечно, может использовать любой заказ, но я не вижу варианта использования для этого. Мы «обойдем ограничения», затем, по крайней мере, мы будем использовать тип VoidResponse, чтобы на некоторое время упростить рефакторинг.

Ваш ответ на вопрос