【发布时间】:2011-09-04 20:21:50
【问题描述】:
有没有办法将文件上传到 WCF Web API 端点?如果可以,如何访问 Network Stream 读取数据?
非常感谢任何帮助。
谢谢。
【问题讨论】:
有没有办法将文件上传到 WCF Web API 端点?如果可以,如何访问 Network Stream 读取数据?
非常感谢任何帮助。
谢谢。
【问题讨论】:
假设您在客户端谈论:
一种方法是创建一个派生自 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
【讨论】:
此答案仅用于在 Web API 预览版 6 中添加一些细节。
TransferMode 和 MaxRecievedMessageSize 是通过 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));
我喜欢!
【讨论】: