Как включить надежность для односторонних методов? - PullRequest
3 голосов
/ 16 марта 2011

Что нужно знать об односторонних вызовах, обратных вызовах и событиях статья рассказывает:

Тот факт, что клиент не заботится о результате вызова, не означает, что клиенту все равно, произошел ли вызов вообще. В целом, вы должны включить надежность для своих услуг, даже для односторонних вызовов

Я пытался найти, как я могу включить надежность, но не нашел ничего значащего.

Не могли бы вы помочь мне:

  1. Как включить надежность?
  2. Как проверить, достиг ли односторонний метод сервера?

Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Я предполагаю, что вы имеете в виду Надежность сообщений, как описано в " Программирование служб WCF " Джувала Лоуи - автора вашей связанной статьи (и, следовательно, эта цитата дословно появляется в книга тоже).

Надежность действительна только для определенных привязок. Возьмите этот пример привязки TCP. В вашем конфигурационном файле:

<binding>
    <netTcpBinding>
        <binding name="MyTcpBinding">
            <reliableSession enabled="true" />
        </binding>
    </netTcpBinding>
</binding>

Для проверки достоверности приведу книгу (с. 66):

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

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

Дополнительная литература:

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

0 голосов
/ 17 марта 2011

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

Возможно, вы могли бы взглянуть на MSMQ и посмотреть, может ли оно вам помочь.

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

0 голосов
/ 16 марта 2011

@ Будда: все верно, вам не нужно ждать ответа или подтверждения сразу после отправки каждого отдельного сообщения на сервер. Это было бы синхронной операцией. Я полагаю, что вы будете использовать асинхронную операцию: сообщение отправляется, а когда-нибудь - когда подтверждение приходит с сервера или когда сокет сообщает вам, что передача не удалась - вы получаете контроль в своей функции «обратного вызова», чтобы сообщить об ошибке уберите сообщение из очереди или что-то еще. Таким образом, вы избежите того большого дела, о котором вас справедливо беспокоит. НО теперь, когда я натолкнулся на возможно запутанный ответ, я вижу, что весь вопрос связан с wcf, о котором я никогда не слышал до этого момента. Итак, если я замутил воду, я прошу прощения. Возможно, в wcf есть асинхронный комм; в общем, я думаю, что это путь, если это возможно. Может быть, это то, что означает «односторонняя связь».

...