Аргументы 'by ref' в WCF - это плохо или хорошо?

недавно мы видели, как служба WCF объявляетпо ссылке аргументы.

Я нене знаю, почему было принято это проектное решение (операции недействительны), но, кроме того, яЯ не могу - насколько мне известно из WCF - сказать, если это хорошая практика или нет. Или если это не актуально.

Как вы думаете?

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

м с marc_s.

Вы должны быть очень осторожны.

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

Как уже объяснил mars_s, wcf является средой обмена сообщениями. Его природа заключается в отправке и получении независимых сообщений.

Я думаю, что хорошей практикой является всегда определять входящее / исходящее сообщение. Ваш sericve-интерфейс будет легче понять и поддерживать.

методы с параметрами ref и out всегда имеют тенденцию быть очень уродливыми и трудными для понимания.

WCF этоне "вызов удаленного объекта метод или что-нибудь - этоЧистая передача сообщений. Так хавниг а "по-исх» параметр может компилироваться, но этона самом деле не собираюсь делать что-нибудь полезное.

На вашем клиенте у вас есть метод с параметрами, которые вы вызываете. Затем среда выполнения WCF перехватывает этот вызов, упаковывает параметры и любую дополнительную информацию, необходимую в сообщение, сериализует это сообщение (в текстовый или двоичный XML) и отправляет это сообщение по сети на сервер.

Затем сервер десериализует сообщения обратно в набор параметров, и компонент диспетчера на сервере затем создает экземпляр класса обслуживания и вызывает соответствующий метод в этом экземпляре класса обслуживания с параметрами из сообщения.

Вся история работает в обратном направлении для ответа, отправляемого сервером обратно.

Но опять же: все выобмен между клиентом и серверомсериализованное сообщение - там'не имеет никакого смысла делать параметр "по реф " - это не может быть параметром by-ref, в конце концов. Сервер и клиент - это совершенно разные миры, совершенно разные объекты и классы - они просто выглядят одинаково на проводе.

Так что я думаю, кто бы ни написал этот метод WCF,Я не понимаю принципы передачи сообщений WCF, но соблазнен тем, что чувствует WCF - как просто вызов метода. Но это'На самом деле это не просто вызов метода.

 thewpfguy20 мар. 2013 г., 08:54
@marc_s Немного поздно, но WCF по умолчанию выполнен в стиле RPC. В конце концов мы вызываем метод для объекта (прокси) и по волшебству метод работает на сервере. Чтобы использоватьобмена сообщениями» стиль, нам нужно использовать контракты сообщений, которые дают нам полный контроль над сообщением SOAP.i '
 marc_s24 дек. 2009 г., 23:14
@MatteoSp: этоочень интересно слышать! Я даже не удосужился попробовать, потому что, насколько я знал, я был уверен, что это никогда не сработает - лучше попробуй сам! :-) Все еще напрашивается вопрос, если этоправда хорошая идея ....
 MatteoSp24 дек. 2009 г., 15:18
Это именно то, о чем я думал. И после вашего ответа я решил запустить тест. Звучит странно, но инфраструктура WCF обрабатывает by ref: если служба вносит изменения в аргумент by ref, после того, как вызов возвращается клиенту, переданный аргумент отражает эти изменения.

Однако, согласно этой статье Microsoft, вызов WCF ведет себя точно так же, как удаленный вызов процедуры, и аргументы ByRef могут использоваться для возврата данных:

http://msdn.microsoft.com/en-us/library/ms733070.aspx

Обратитесь к разделу: Out и Ref Parameters

В большинстве случаев вы можете использовать параметры (ByVal в Visual Basic) и параметры out и ref (ByRef в Visual Basic). Поскольку параметры out и ref указывают, что данные возвращаются из операции, подпись операции, такая как следующая, указывает, что операция запрос / ответ требуется, даже если подпись операции возвращает void.

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