【发布时间】:2011-01-28 18:19:44
【问题描述】:
我在看这个帖子:How to handle large file uploads via WCF?
我需要在我的提供商处托管一个 Web 服务,我需要将文件上传和下载到该服务。我们正在讨论从 1Mb 到 100Mb 的视频,因此是流媒体方法。
我不能让它工作,我声明了一个接口:
[ServiceContract]
public interface IFileTransferService
{
[OperationContract]
void UploadFile(Stream stream);
}
一切都很好,我是这样实现的:
public string FileName = "test";
public void UploadFile(Stream stream)
{
try
{
FileStream outStream = File.Open(FileName, FileMode.Create, FileAccess.Write);
const int bufferLength = 4096;
byte[] buffer = new byte[bufferLength];
int count = 0;
while((count = stream.Read(buffer, 0, bufferLength)) > 0)
{
//progress
outStream.Write(buffer, 0, count);
}
outStream.Close();
stream.Close();
//saved
}
catch(Exception ex)
{
throw new Exception("error: "+ex.Message);
}
}
仍然没有问题,它已在互联网上发布到我的网络服务器。到目前为止一切顺利。
现在我引用它并将其传递给一个 FileStream,但参数现在是一个字节 [] - 为什么会这样以及如何获得它的正确流式传输方式?
编辑 我的绑定看起来像这样:
<bindings>
<basicHttpBinding>
<binding name="StreamingFileTransferServicesBinding"
transferMode="StreamedRequest"
maxBufferSize="65536"
maxReceivedMessageSize="204003200" />
</basicHttpBinding>
</bindings>
我可以毫无问题地使用它,并且没有错误 - 除了我的输入参数已从流更改为字节[]
编辑 2 解决了!当我在我的客户上进行参考时,我有点快。偶然我做了一个“网络参考”而不是“服务参考”。这解决了 byte[] / stream 问题
【问题讨论】:
-
你能制作一个wsdl吗?如果是这样,您可以将其添加到您的描述中。我相信这可能是您绑定中的配置问题。
-
我认为当我可以使用它并通过我的浏览器浏览它时,我可以生成 wsdl?
-
你如何“参考它”?是 ServiceReference 吗?
-
咳咳!你是正确的。我刚刚检查过,它不是服务参考,而是网络参考......这解决了我的问题 - 现在