簡體   English   中英

WCF命名為管道流

[英]WCF Named Pipe Streaming

我已經實現了使用流傳輸模式和net.pipe綁定的服務器/客戶端測試裝置。 一切都是這樣,但是當實際服務器的流實現在空緩沖區中阻塞時,我遇到了一個問題。 即使我刪除了所有同步,也將並發模式設置為多個,但是我的客戶端應用程序在stream.Read上阻塞時出現問題。

因此,我的客戶端使用“ GetStream”調用(在非UI線程上)啟動了到服務器的連接,服務器返回的實際流實現是阻塞流(例如NetStream),因此當存在以下情況時它將阻塞沒有可用的字節讀取。 這導致服務主機的完全鎖定,因此現在客戶端無法再進行任何調用,直到stream.read操作解除阻塞。

有人可以闡明這種行為嗎?

我已經解決了匿名管道(異步和同步管道)的工作代碼。 從我的經驗來看,您不能擁有共享內存緩沖區“空”。 我相信,即使在異步模式下,也會創建后台線程以進行同步讀寫。

因此,現在考慮一下這個事實,

服務器必須首先向緩沖區發送寫操作=>客戶端應讀取它=>客戶端必須寫回該緩沖區=>服務器必須讀取它。

為了不凍結應用程序,該循環必須永遠重復。 我開始認為這就是使共享內存通過服務器/客戶端套接字進行通信的不同之處。 在共享內存方法中,您可能不必擔心同步,它還將客戶端專用於服務器,因此客戶端不能與服務器一起存在。

您應該查看使用較舊的“異步”樣式的Begin / End Read / Write方法以允許異步通信。 不幸的是,.net中沒有對命名管道的異步/等待支持-但是,您可以使用TaskFactory.FromAsync方法包裝它們。

暫無
暫無

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

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