我使用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