Я использую WCF для асинхронного обмена данными между двумя процессами.
до сих пор я реализовал шаблон IAsyncResult, и сделал это с 3 способами:
BeginOperation - client.BeginOperation, когда служба получит его в очередь на работу ThreadPool с делегатом для работы
Эксплуатация - запуск на стороне службы
EndOperation - это то, что клиент обратный вызов.WCF Async вызывает это return void и является OneWay
Мой вопрос в том, что я хочу отправить строки от клиента к службе, я хочу, чтобы send был асинхронным, И я не хочу получать ответ - просто хочу, чтобы служба печатала строку.
Этого достаточно? Это должно быть Неблокирующий
[OperationContract(IsOneWay = true)]
void PrintString(string message);
ИЛИ мне нужно сделать следующие:
[OperationContract(IsOneWay = true, AsyncPattern=true)]
void BeginPrintString(string message, AsyncCallback callback, object state);
void EndPrintString(IAsyncResult asyncResult);
Как IsOneWay достаточно, если они явно пишут, что: операции O/W все еще могут блокироваться. если служба накачивается сообщениями и запускается очередь, вызов операции O/W может блокировать ваш следующий код. – ilansch
Его значение зависит от вашего использования/потребностей. Например, если вы вызываете сервер один раз в час, и вы сидите дросселирование до 100 одновременных вызовов, ... я бы рассмотрел возможность настройки конфигурации и использования (да, все еще может случиться), чтобы измерить возможность заблокированного/ожидающего клиента. – evgenyl
это моя служба регистрации, что означает, что 5-10 различных процессов будут выполнять их регистрацию с использованием клиентских вызовов.каждый процесс имеет wcf-клиент, который отправляет строковое сообщение в журнал. служба затем запустит строку. постоянный вход в систему от нескольких клиентов, а Служба - одна – ilansch