gpt4 book ai didi

c# - 尝试序列化参数时出错

转载 作者:行者123 更新时间:2023-12-04 00:06:54 24 4
gpt4 key购买 nike

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

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

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

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

在网上研究后发现这是一个错误的异常,因此我打开了跟踪,这是来自跟踪日志的异常消息:

尝试序列化参数 http://tempuri.org/:GetStreamResult 时出错。 InnerException 消息是“类型‘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); }
}

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

亲切的问候

Ember

最佳答案

你没有办法做到这一点。

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

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

了解更多 here .

关于c# - 尝试序列化参数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5868170/

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