2011-05-30 63 views
2

有什么方法可以将文件上传到WCF Web API端点?如果是这样,我怎样才能访问网络流来读取数据?上传文件WCF Web API端点

任何帮助,非常感谢。

谢谢。

回答

4

假设您在客户端上谈到:

一种方式来做到这一点是创建一个从HttpContent派生的FileContent类。在覆盖中,当HTTPClient准备好接收流时,您将获得NetworkStream。

如果您询问服务器端,那么您可以简单地获取HTTPRequestMessage并访问httpRequestMessage.Content.ContentReadStream属性。


更新

默认情况下,WCF传输被限制在65K发送消息。如果你想发送更大的文件,你需要启用“流式传输模式”,你需要增加MaxReceivedMessageSize的大小,这就是为了防止有人通过上传大量文件来杀死你的服务器。

所以,你可以使用绑定配置来做到这一点,或者你可以在代码中做到这一点。下面是做到这一点的代码的一种方式:

var endpoint = ((HttpEndpoint)host.Description.Endpoints[0]); //Assuming one endpoint 
endpoint.TransferMode = TransferMode.Streamed; 
endpoint.MaxReceivedMessageSize = 1024 * 1024 * 10; // Allow files up to 10MB 
+0

我不认为WCF Web API Preview 4支持接受multipart/form-data作为内容类型。我无法实现文件上传的端点。希望这将在下次预览中得到解决。 – aumanets 2011-06-14 19:42:56

+0

您不需要使用multipart/form-data作为内容类型。你可以发送内容作为application/octet-stream – 2011-06-14 19:49:19

+0

我试过使用application/octet-stream并且没有成功。现在我不确定这个问题是由内容类型引起的。当我发出请求时,它没有达到配置的终点,并且不会引发任何异常。也许这是因为发送的数据大于65535字节?你知道如何改变WCF Web API的这个值吗? – aumanets 2011-06-16 09:49:42

2

这个答案仅设计与Web API预览添加一些细节6.

TransferModeMaxRecievedMessageSize是新通过WebApiConfigurationClass暴露。

var builder = new WebApiConfiguration(); 
builder.TransferMode = TransferMode.Streamed; 
builder.MaxReceivedMessageSize = 1024 * 1024 * 10; 

var serviceRoute = new WebApiRoute(route, new WebAPIServiceHostFactory() { Configuration = builder }, typeof(MyService)); 

我喜欢它!