gpt4 book ai didi

c# - gzip 流并使用 WCF 发送它

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:38 28 4
gpt4 key购买 nike

我尝试使用 WCF 发送 gzip 压缩流。

这里是代码服务器端:

    static void Main(string[] args)
{
var baseAddress = new Uri("http://localhost:2016/TransferServer");
var host = new ServiceHost(typeof(TransferServer), baseAddress);
var binding = new BasicHttpBinding
{
TransferMode = TransferMode.Streamed,
MaxReceivedMessageSize = long.MaxValue,
MaxBufferSize = 65535,
};
host.AddServiceEndpoint(typeof(ITransferServer), binding, baseAddress);
var smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
host.Description.Behaviors.Find<ServiceDebugBehavior>().IncludeExceptionDetailInFaults = true;

host.Open();

Console.Read();
}

TransferServer 类:

public class TransferServer : ITransferServer
{
public void Transfer(Stream stream)
{
using (var gz = new GZipStream(stream, CompressionMode.Decompress))
using (var fs = new FileStream("test.bin", FileMode.Create))
{
gz.CopyTo(fs);
}
}
}

客户端:

    public void SendStream(Stream stream)
{
var client = new TransferServerClient(
new BasicHttpBinding {MaxReceivedMessageSize = long.MaxValue, TransferMode = TransferMode.Streamed},
new EndpointAddress(@"http://localhost:2016/TransferServer"));
client.Open();

client.TransferDump( ??? gzipped stream ???);
}

压缩的 GzipStream 必须写入另一个流,但我只想发送一个已经 gzip 的流。

谢谢

最佳答案

您应该创建自己的从 .net“Stream”派生的流并实现 Read 方法

public override int Read(byte[] buffer, int offset, int count)
{
while (count > 0)
{
//Here you should utilize GZipStream
Array.Copy(gzipBuffer, position, buffer, offset, count);
}

return processedBytes;
}

关于c# - gzip 流并使用 WCF 发送它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26912369/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com