【问题标题】:C# - How to read a Stream in a WCF serviceC# - 如何在 WCF 服务中读取流
【发布时间】:2011-05-24 02:13:29
【问题描述】:

我有一个 WCF 服务,我想发送一个日志文件并在服务器上处理它。 合同是:

[OperationContract]
void LogFile(Stream file);

我在端点中使用 StreamedRequest。

我的问题是我找不到在服务中读取流的方法。

当我调试调用时,我看到 Stream 是一个实例:

System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream

我从客户端发送一个 MemoryStream。

那么...我如何读取流?

谢谢。

编辑1: 我正在使用:

        Stream serviceStream = new MemoryStream();
        byte[] buffer = new byte[10000];
        int bytesRead = 0;
        do
        {
            bytesRead = file.Read(buffer, 0, buffer.Length);
            serviceStream.Write(buffer, 0, bytesRead);
        } while (bytesRead > 0);
        serviceStream.Position = 0;

读取流,什么都没有,总是 0

【问题讨论】:

    标签: c# wcf stream


    【解决方案1】:

    我的错,在客户端我忘记将流的位置设置为 0,所以服务正在获取位置在其末尾的流

    【讨论】:

    • 拯救我的一天!我从没想过!
    【解决方案2】:

    不用担心给你的流的内部类型。只需像往常一样阅读流(例如使用StreamReader),一切都会好起来的。请注意,您不需要在任一侧的流上调用 DisposeClose,WCF 会处理。

    【讨论】:

    • 您的代码的服务端是什么样的?如果那个客户端代码是你真正使用的,那么服务端就有问题。
    • 我的错,在客户端我忘记将流的位置设置为 0,所以服务正在获取位置在其末尾的流
    • 你应该把它写下来作为答案并接受它,这样人们就可以看到并避免一个简单的错误。
    猜你喜欢
    • 2011-04-05
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多