Я пытаюсь написать этот вопрос в четвертый раз, так как, к сожалению, я не уверен, чего я на самом деле хочу. Пожалуйста, извините, что я расплывчата или немного смущена.TextReader и TextWriter над WCF
У меня есть приложение командной строки .NET4.5 C#. Я буду запускать его одновременно в двух географически отдаленных местах. Я хочу иметь возможность превратить один экземпляр в хост, а другой - в клиент.
В основе этого я хочу реализовать реализацию TextReader, которая после Read/ReadLine ожидает ввода от удаленного клиента. Я также хочу, чтобы TextWriter на Write/WriteLine вызывал удаленный клиент и передавал ему текст.
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){...}
}
А затем разместить его в обоих случаях, вызовите RegisterClient от клиента предоставления собственной конечной точки URL, а затем, если хост хочет вернуть некоторые данные клиенту - только звонки 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. –
Похоже, вы хотите использовать форму дуплексного канала WCF (http://msdn.microsoft.com/en-us/library/ms731064%28v=vs.110%29.aspx), чтобы вы могли иметь асинхронный bi -направленная связь. –