我有一个服务器应用程序执行另一个应用程序,第二个应用程序构建一个日志文件, 我希望服务器通过WCF将其发送到客户端。
我希望客户端在EXEC应用程序更新日志时读取日志。
我使用了返回流(日志文件)的操作合同。 问题是,当我第一次发送流时,日志仍为空, 并且客户端看不到服务器EXEC写的“更新”。
这是服务器代码:
public Stream GetLog()
{
Stream stream = new FileStream(@"Log.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
return stream;
}
来自服务器的EXEC只是写入“Log.txt”文件
这是客户端代码:
public void SaveLog()
{
Stream stream = ServerProxy.GetLog();
StreamWriter writer = new StreamWriter("NEWLog.txt");
writer.AutoFlush = true;
StreamReader reader = new StreamReader(stream);
char[] buf = new char[100];
int count = 0;
while (count = reader.ReadBlock(buf, 0, 100) > 0)
{
writer.Write(buf, 0, count);
}
stream.Close();
writer.Close();
}
如何使用Log in TIME实时更新客户端?
答案 0 :(得分:1)
我认为你的绑定是错误的。
你应该设置transferMode="Streamed"
你可以找到一个例子:
答案 1 :(得分:0)
有几种可能性。 你被允许修改合同吗?如果您可以使用会话感知绑定(如netTcpBinding),则可以修改合同以使用回调合同,其中回调用于发布新的日志数据。
[ServiceContract]
public interface ILogCallback
{
[OperationContract(IsOneWay = true)]
void NewLog(string logString);
}
[ServiceContract(CallbackContract = typeof(ILogCallback))]
public interface ILog
{
/// Call this method to sign up for future log messages,
/// which will be sent to the callback NewLog.
[OperationContract]
void SignMeUpForLogs();
}
您可以使用哪种绑定?会话是否可行?或者您必须使用PerCall吗?
此致 弗雷德里克