【问题标题】:There was an error while trying to serialize parameter尝试序列化参数时出错
【发布时间】:2011-05-03 10:30:35
【问题描述】:

我有一个 WCF 服务,我希望将一些文件从服务器流式传输到客户端。

当我硬编码文件的文件名以流式传输到代码中时,我已经完成了这项工作。

我正在尝试更改代码,以便 getStream 方法返回一个 Dictionary,以便我可以返回文件名集合和与文件名关联的流,然后在客户端处理每个流。

尝试调用 getStream 方法时,我在客户端收到以下异常: 接收对 http://localhost:8082/ 的 HTTP 响应时出错。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。

在网上研究了这个之后,看起来这是一个错误的异常,所以我打开了跟踪,这是来自跟踪日志的异常消息:

尝试序列化参数http://tempuri.org/:GetStreamResult 时出错。 InnerException 消息是 'Type 'System.IO.FileStream' ,数据合同名称为 'FileStream:http://schemas.datacontract.org/2004/07/System.IO' 不是预期的。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。有关详细信息,请参阅 InnerException。

这是服务器端代码:

public Dictionary<String, Stream> GetStream()
    {
        Dictionary<String, Stream> retDic = new Dictionary<string, Stream>();          

        string[] fileEntries = Directory.GetFiles(@"C:\Users\Ash\Desktop\FrontendPluginsServer");
        foreach (string fileName in fileEntries)
        {
             //do something with fileName
            retDic.Add(fileName, File.OpenRead(fileName));
        }
        //return File.OpenRead(@"C:\Users\Ash\Desktop\FrontendPluginsServer\OptekImporterFrontend.dll");

        return retDic;
    }

这是客户端代码:

ModuleDownloader.ModuleDownloaderClient moo = new ModuleDownloader.ModuleDownloaderClient();
        Dictionary<String, Stream> dic = moo.GetStream();

        foreach (String key in dic.Keys)
        {
            using (Stream file = File.OpenWrite(@"C:\Users\Ash\Desktop\FrontEndPluginsClient\" + key)) { CopyStream(dic[key], file); }
        }

如果您需要更多信息,请告诉我。

亲切的问候

【问题讨论】:

  • 有完整源代码的最终解决方案吗?

标签: c# wcf serialization


【解决方案1】:

你无法做到这一点。

  • FileStream 不可序列化。 它尝试序列化它的原因是它不遵循 WCF 流式传输约定。
  • WCF 对流式传输的限制规定您必须在方法签名中使用一个 Stream,如果您想使用 WCF 流式传输,则无需其他任何内容。

任何时候,您都只能发送一个流。

阅读更多here

【讨论】:

  • 谢谢。猜猜我可以通过调用服务器以返回存在的文件名列表然后调用 getStream 以返回该文件的单个流来做我想做的事?或者你能想出更好的方法吗?
  • 我想不出更好的方法。我会照你说的做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多