我想第四次寫這個問題,因爲我很遺憾不知道我真正想要什麼。請原諒我模糊或稍微偏離。TextReader和TextWriter通過WCF
我有一個命令行.NET4.5 C#應用程序。我會在兩個地理位置相距遙遠的地方同時運行它。我希望能夠將一個實例變成主機,另一個變成客戶端。
在它的核心,我想要一個TextReader實現,在Read/ReadLine等待來自遠程客戶端的輸入。我也想要一個Write/WriteLine的TextWriter將調用遠程客戶端並將文本傳遞給它。
TextWriter當然是相當簡單的事情,因爲我基本上是這樣做的:在編寫時,請給另一個實例調用client.SendText(s);
。
如何在該場景中執行TextReader.ReadLine()
?一個天真的形式給出。將具有在WCF服務的方法:
但保持WCF操作調用打開幾分鐘甚至幾小時一個好主意?
的另一種方式,我可以看到的是有:
class Service : IService{
void RegisterClient(string url){/* url points to an IService endpoint in client*/}
void SendString(string s){...}
}
然後在這兩種情況下舉辦的,從客戶提供自己的端點URL調用RegisterClient,然後,如果主機要一些數據返回到客戶端 - 只是調用SendString,沒問題。但是,如果主持人必須等待客戶的意見,如何合理解決呢?
class WCFTextReader : TextReader{
public override string ReadLine(){
// what here? it should return whatever comes in the next SendString call from client...
}
}
我收到的郵件的Queue<string>
,然後做一個while(true)
,要麼從Queue
或Thread.Sleep
先回了一小會兒,然後重新檢查,但每次我覺得我需要while(true)
和Thread.Sleep
我d寧願來這裏,因爲我覺得我失去了一些東西......
我建議你忘掉'TextReader'和'TextWriter',而是直接使用WCF。 – 2014-12-03 17:36:27
這聽起來像你想使用WCF的[雙工通道形狀](http://msdn.microsoft.com/en-us/library/ms731064%28v=vs.110%29.aspx),以便您可以有異步bi雙向溝通。 – 2014-12-03 17:52:18