我使用WCF在2个进程之间进行异步通信。
到现在我实现了IAsyncResult的模式,并且通过具有3种方法做到了:
BeginOperation - client.BeginOperation,当服务收到队列中的作业上的线程池与委托操作
操作 - 在服务端
EndOperation运行 - 这是客户端回调。WCF异步调用,返回void并且是OneWay
我的问题是,我想从客户端发送字符串到服务,我希望发送是异步的,我不想得到响应 - 只是希望服务打印字符串。
这够了吗?这必须是非阻塞
[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 2013-04-30 13:49:39
这取决于您的使用/需求。例如,如果您每小时调用一次服务器,并且对100个并发调用进行了限制,我会考虑检查配置和用例(是的,仍然会发生),以测量阻止/等待客户端的可能性。 – evgenyl 2013-04-30 13:54:42
这是我的日志服务,这意味着5-10个不同的进程将使用客户端调用进行日志记录。每个进程都有wcf客户端发送字符串消息进行登录。该服务将会记录该字符串。从多个客户端不断记录和服务是单一 – ilansch 2013-04-30 14:00:16