WCF 服务发送 .txt 或 .xls 但不发送 .gz(压缩文件)

Posted

技术标签:

【中文标题】WCF 服务发送 .txt 或 .xls 但不发送 .gz(压缩文件)【英文标题】:WCF Service sends a .txt or .xls but not a .gz (Zipped file) 【发布时间】:2011-08-17 14:26:01 【问题描述】:

我有一个 WCF 服务启动并正在运行,它将文件保存到我的服务器。我通过发送.txt 文件和.xls 文件对此进行了测试。 .xls 文件的大小为 90kb。

现在我有一个压缩文件.gz,它的大小只有 70KB,但是当我尝试完成这个操作时,我得到了

远程服务器返回意外响应:(400) 错误的请求。

当我尝试搜索此错误请求时,大多数结果导致正在发送一个大文件并且我需要更改配置文件中的设置。

这不是我的原因,因为 .gz 文件小于 .xls 文件!

有谁知道为什么这种类型的文件不能像文本或 Excel 文件一样发送???

编辑:添加代码

这里是调用服务的方法

        string name = "New Doc";
        string file = @"C:/Users/Admin/Desktop/fileZipped.gz";           
        string ext = file.Split('.')[1]; 

        Stream stream = File.OpenRead(file);
        byte[] bytes = new byte[stream.Length];
        stream.Read(bytes, 0, (int)stream.Length);
        stream.Close();

        var uploadFileServiceClient = new UploadFileServiceClient(); 
        uploadFileServiceClient.UploadFile(name, bytes, ext);

这是我的服务:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]    
public class UploadFileService : IUploadFileService

    public bool UploadFile(string name, byte[] bytes, string extension)
    
        string importDir = ConfigurationSettings.AppSettings["UploadFileDir"];
        if (String.IsNullOrEmpty(importDir))
            return false;

        if (!Directory.Exists(importDir))
            return false;

        string outputFile = Path.Combine(importDir, Guid.NewGuid() + "." + extension);
        string filename = outputFile.Split('\\')[2]; 

        using (StreamWriter sw = new StreamWriter(outputFile))
        
            sw.WriteLine(bytes);
            sw.Flush();
            sw.Close();
        
           return true;
    

就像我说的,它适用于文本或 Excel 文件。

【问题讨论】:

您是否尝试过使用tracing 来获取更多错误详情?还显示一些代码会更容易理解问题出在哪里。 请求参数的格式是什么?字节数组?编码字符串? 我尝试过跟踪,发现在请求头中实体的内容长度为 103144 和内容类型,但在响应头中,内容长度为 0? 【参考方案1】:

如果中间没有“过滤代理”:

我们有类似的东西,结果解决方案是在客户端+服务器上相应地设置 MIME 类型...

【讨论】:

以上是关于WCF 服务发送 .txt 或 .xls 但不发送 .gz(压缩文件)的主要内容,如果未能解决你的问题,请参考以下文章

WCF - 使用 NetHttpBinding(WebSockets) 或替代双工绑定发送 JSON

将数据(复杂数据/原始数据)发送到服务并获取响应(复杂数据/原始数据)的最佳方式(WCF 或 WEB API)

WCF 服务在 Outlook 上发送电子邮件 | HRESULT 异常

WCF 设计和实现服务协定(01)

浅谈WCF

向 WCF 服务发送数据