File upload 上载文件WCF Web API端点

File upload 上载文件WCF Web API端点,file-upload,wcf-web-api,File Upload,Wcf Web Api,有没有办法将文件上载到WCF web API端点?如果是,我如何访问网络流来读取数据 非常感谢您的帮助 谢谢。假设您在客户端谈论: 一种方法是创建一个从HttpContent派生的FileContent类。在覆盖中,当HTTPClient准备好接收流时,您将获得NetworkStream 如果您询问的是服务器端,那么您可以简单地获取HTTPRequestMessage并访问HTTPRequestMessage.Content.ContentReadStream属性 更新 默认情况下,WCF传输

有没有办法将文件上载到WCF web API端点?如果是,我如何访问网络流来读取数据

非常感谢您的帮助


谢谢。

假设您在客户端谈论:

一种方法是创建一个从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

这个答案只是为了在WebAPI预览6中添加一些细节

TransferMode
MaxReceivedMessageSize
是通过
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));

我喜欢

我认为WCF Web API Preview 4不支持接受多部分/表单数据作为内容类型。我无法实现文件上载的端点。希望在下次预览时可以解决这个问题。您不需要使用多部分/表单数据作为内容类型。您可以将内容作为application/octet流发送。我尝试过使用application/octet流,但没有成功。现在我不确定这个问题是由内容类型引起的。当我发出请求时,它不会到达配置的端点,也不会引发任何异常。可能是因为发送的数据大于65535字节?您知道如何在WCF Web API上更改此值吗?更改TransferMode和MaxReceivedMessageSize解决了此问题。非常感谢。@Darreller我听说Preview 5内置了文件上传功能。在哪里可以找到示例实现?