Аргументы 'by ref' в WCF - это плохо или хорошо? - PullRequest
6 голосов
/ 24 декабря 2009

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

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

Что ты думаешь?

Ответы [ 3 ]

5 голосов
/ 15 июля 2010

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

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

См. Раздел: Параметры выхода и ссылки

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

4 голосов
/ 24 декабря 2009

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

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

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

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

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

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

1 голос
/ 16 января 2012

Я с marc_s.

тебе нужно быть очень осторожным.

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...