'Касательно' аргументов в WCF, плохом или хорошем?

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

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

Что Вы думаете?

6
задан Alex Angas 26 October 2010 в 02:45
поделиться

2 ответа

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

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

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

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

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

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

4
ответ дан 10 December 2019 в 00:39
поделиться

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

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

См. раздел: Параметры Out и Ref

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

5
ответ дан 10 December 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: