簡體   English   中英

wcf單向非阻塞操作

[英]wcf oneway non blocking operation

我需要這樣的場景:客戶端將消息發送到服務器,而不等待響應,並且不在乎消息是否正確發送。

using(host.RemoteService client = new host.RemoteService())
{
client.Open();

cliend.SendMessage("msg");
}

在啟用防火牆或沒有Internet連接的情況下,客戶端會在“ SendMessage”處死亡。 我的意思是程序停止響應。 我希望程序不在乎結果。 我的意思是,如果沒有連接,我希望程序能走得更遠,省略“ SendMessage”或類似的內容。

我該怎么辦,非阻塞方法有解決方案嗎?

在您的服務合同中嘗試以下操作:

[OperationContract(IsOneWay=true)]
void Send(string message);

請參閱以下鏈接:

WCF中的單向操作



編輯:OP已經在使用我建議的解決方案。

建議的解決問題的方法-摘自MSDN( 一站式服務 ):

客戶阻止單向操作

重要的是要意識到,盡管某些單向應用程序將出站數據寫入網絡連接后立即返回,但是在某些情況下,綁定或服務的實現可能導致WCF客戶端使用單向操作進行阻塞。 在WCF客戶端應用程序中,只有將出站數據寫入網絡連接后,WCF客戶端對象才會返回。 對於所有消息交換模式(包括單向操作)都是如此。 這意味着將數據寫入傳輸中的任何問題都會阻止客戶端返回 根據問題,結果可能是異常,也可能是向服務發送消息的延遲。

您可以通過在客戶端對象和客戶端傳輸的send操作之間插入緩沖區來緩解某些問題。 例如, 使用異步調用或使用內存中消息隊列可以使客戶端對象快速返回 兩種方法都可以增加功能,但是線程池和消息隊列的大小仍然會限制。

相反,建議您檢查服務以及客戶端上的各種控件,然后測試您的應用程序方案,以確定雙方的最佳配置。 例如,如果使用會話阻止了服務上消息的處理,則可以將System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode屬性設置為PerCall以便可以由不同的服務實例處理每條消息,並將ConcurrencyMode設置為Multiple以允許多個線程在同一時間發送消息。 另一種方法是增加服務和客戶端綁定的讀取配額。

修改屬性

[OperationContract(IsOneWay=true)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM