【问题标题】:streaming a file while hes being written in WCF在 WCF 中写入文件时流式传输文件
【发布时间】:2013-01-25 20:18:32
【问题描述】:

我有一个服务器应用程序执行另一个应用程序,第二个应用程序构建一个日志文件, 我希望服务器通过 WCF 将其发送给客户端。

我希望客户端在 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();
    }

如何使用实时登录更新客户端?

【问题讨论】:

  • 您是如何从客户端的日志文件中读取数据的?你只展示你是如何打开它的。
  • 我有一个流阅读器..它写在客户端代码中..
  • 如果您包含您的代码会有所帮助,因为该注释无助于更清楚地解释您的逻辑为什么不起作用。
  • 它在这里,在我发布的客户端代码中
  • 我明白了——抱歉,完全错过了!

标签: c# wcf file stream contract


【解决方案1】:

我认为你的绑定是错误的。 你应该设置你的transferMode="Streamed"

你可以找到一个例子:

http://msdn.microsoft.com/en-us/library/ms751463.aspx

【讨论】:

  • 我已经使用了这个设置,但是客户端流仍然没有随着服务器流的变化而更新。
  • @IsraelKo 尝试使用 basicHttpBinding
【解决方案2】:

有几种可能性。 可以修改合同吗?如果您可以使用像 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?

问候, 弗雷德里克

【讨论】:

  • 我正在使用NetTcpBinding,你的解决方案确实解决了问题,但是实现起来很复杂,要存储所有订阅者想要的日志,并运行线程来捕获日志文件中的更改并更新所有订阅者。如果我的简单代码能正常工作,我会很高兴。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
相关资源
最近更新 更多