我正在尝试使用流式传输文件到我的WCF服务上传大文件。所有这一切都可以正常使用普通客户端(如ASP.net页面)。但是在Silverlight中我收到以下错误: 此流不支持超时
我通过内存流上传,我认为问题基本上是因为我不得不在Silverlight中调用同步方法而是调用异步方法。所以这就是不喜欢正常的内存流。我试图找到一些其他的流来使用,但似乎要么在silverlight(bufferedstream,networkstream)中不支持它们,要么打破方法(泛型流由于某种原因必须是要使用的方法的唯一参数)。我在这里错过了什么吗?我最初使用的是字节数组,但是我需要允许上传的内容有太多的大小限制。
我可以在这里插入我的代码,但由于我的ASP.net测试客户端一切正常,我假设我的绑定和代码都没问题。
答案 0 :(得分:0)
这里有三个不同的问题:
1)您可以在合同中使用Stream类型吗?
2)你能在客户端获得真正的流媒体行为吗? (例如,上传2GB文件而不在堆栈中的任何位置分配2GB内存 - 包括底层HTTP堆栈)
3)你能在服务器上获得真正的流媒体行为吗?
据我记忆,Silverlight中#1和#2的答案是“否”(尽管在SL4.0中可能已经改变)。所以你能达到的最好成绩是#3。例如,您可以尝试在Silverlight端使用基于byte []的合同,从而产生与服务器端基于Stream的合同相同的XML投影。或者,在客户端使用byte []并直接在服务器端从Message类中读取。
但我对#1 /#2的回忆可能是错误的......