Я недавно видел, что сервис WCF объявляет контракты на операцию с касательно аргументов.
Я не знаю, почему это проектное решение было взято (операции являются пустыми), но кроме того, я не могу - от моего знания WCF - сказать, является ли это хорошей практикой или нет. Или если это не релевантно.
Что Вы думаете?
WCF - это не метод "вызова удаленного объекта" или что-то в этом роде - это чистое сообщение. Таким образом, не имея параметра "by-ref", можно скомпилировать, но на самом деле он не будет делать ничего полезного.
На вашем клиенте, у вас есть метод с параметрами, которые вы вызываете. Во время выполнения WCF затем перехватывает этот вызов, упаковывает параметры и любую дальнейшую информацию, необходимую в сообщении, сериализует это сообщение (в текстовый или двоичный XML), и посылает это сообщение через провод к серверу.
Сервер затем десериализует сообщения обратно в набор параметров, и диспетчерский компонент на сервере будет затем инстанцировать класс обслуживания и вызывать соответствующий метод на экземпляре этого класса обслуживания с параметрами из сообщения.
Вся история работает в обратном порядке для ответа, который посылает сервер.
Но опять же: все, что вы обмениваетесь между клиентом и сервером, это сериализованное сообщение - нет абсолютно никакого смысла делать параметр "по ссылке" - это, в конце концов, не может быть параметром "по ссылке". Сервер и клиент - это совершенно разные миры, совершенно разные объекты и классы - они просто выглядят одинаково на проводе.
Так что я думаю, что тот, кто написал этот метод WCF, не понимал принципов передачи сообщений WCF, но был соблазнен тем, как WCF чувствует себя - как просто вызов метода. Но на самом деле это не просто вызов метода в конце.
Однако, согласно этой статье Microsoft, вызов WCF ведет себя точно так же, как вызов удаленной процедуры, и для возврата данных могут использоваться аргументы ByRef: -
http://msdn.microsoft.com/en-us/library/ ms733070.aspx
См. раздел: Параметры Out и Ref
В большинстве случаев вы можете использовать в параметрах (ByVal в Visual Basic) и параметры out и ref (ByRef в Visual Basic). Потому что и вне, и параметры ref указывают, что данные возвращаются из операции, подпись операции, такая как следующая, указывает, что операция запроса / ответа требуется, даже если операция подпись возвращает недействительность.