首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF上的TextReader和TextWriter

WCF上的TextReader和TextWriter
EN

Stack Overflow用户
提问于 2014-12-04 01:34:02
回答 1查看 112关注 0票数 0

我正在尝试第四次写这个问题,因为不幸的是我不确定我真正想要的是什么。请原谅我的含糊其辞或有点离谱。

我有一个命令行.NET4.5 C#应用程序。我将在两个地理位置相距较远的地方同时运行它。我希望能够将一个实例转换为主机,将另一个实例转换为客户端。

在它的核心,我想要一个TextReader实现,它在读取/读取行时等待来自远程客户端的输入。我还想要一个TextWriter,它在写入/写入行时将调用远程客户端并将文本传递给它。

当然,TextWriter是相当简单的事情,因为我基本上就是这样做的:在写入时,对另一个实例调用client.SendText(s);

在这种情况下,我该如何实现TextReader.ReadLine()?一个简单的方法是,在WCF服务中有一个方法:

代码语言:javascript
复制
class Service : IService{
    void SendText(string s){
        Console.WriteLine(s); // or whatever is the destination TextWriter
    }
    string ReadLine(){
        return Console.ReadLine(); // or whatever is the source TextReader
    }
}

但是让WCF操作调用打开几分钟甚至几个小时是个好主意吗?

我能看到的另一种方式是:

代码语言:javascript
复制
class Service : IService{
    void RegisterClient(string url){/* url points to an IService endpoint in client*/}
    void SendString(string s){...}
}

然后在两个实例中托管它,从客户端调用RegisterClient,提供自己的端点url,然后如果主机想要向客户端返回一些数据-只需调用SendString,没有问题。但是如果主机必须等待客户端的输入,该如何合理地解决呢?

代码语言:javascript
复制
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),然后先从QueueThread.Sleep返回一小段时间并重新检查,但每次我觉得我需要while(true)Thread.Sleep时,我宁愿来这里,因为我觉得我错过了一些东西……

EN

回答 1

Stack Overflow用户

发布于 2014-12-04 02:02:59

默认的WCF消息模式是请求/响应;客户端发送请求,服务器对其进行响应。

但是,有一种双工消息模式,其中服务接口协定将另一个接口标识为其回调接口协定;客户端必须实现该回调接口协定,类似于服务必须实现服务接口协定的方式。

此消息模式应允许您的服务器向客户端任意发送消息,而客户端不必提示它这样做。

http://msdn.microsoft.com/en-us/library/ms731064%28v=vs.110%29.aspx

http://msdn.microsoft.com/en-us/library/ms731184%28v=vs.110%29.aspx

**公平警告:根据我的经验,您可能仍然需要处理保持连接活动的问题,以防您计划让服务器在长时间不活动后将消息发送回客户端。

如果您可以接受保持连接打开,那么您可以实现某种保持活动的机制。

如果保持连接打开是不可接受的,那么我认为您需要考虑一种更复杂的方法,该方法涉及客户端定期向服务器签入,以便服务器有机会向客户端发送它为客户端提供的任何排队的消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27278050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档