【问题标题】:Uploading files WCF Web API Endpoint上传文件 WCF Web API 端点
【发布时间】:2011-09-04 20:21:50
【问题描述】:

有没有办法将文件上传到 WCF Web API 端点?如果可以,如何访问 Network Stream 读取数据?

非常感谢任何帮助。

谢谢。

【问题讨论】:

    标签: file-upload wcf-web-api


    【解决方案1】:

    假设您在客户端谈论:

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

    【讨论】:

    • 我认为 WCF Web API Preview 4 不支持接受 multipart/form-data 作为内容类型。我无法为文件上传实现端点。希望这将在下一次预览中得到解决。
    • 您不需要使用 multipart/form-data 作为内容类型。您可以将内容作为 application/octet-stream 发送
    • 我尝试过使用 application/octet-stream 但没有成功。现在我不确定这个问题是由内容类型引起的。当我发出请求时,它不会到达配置的端点并且不会引发任何异常。也许是因为发送的数据大于 65535 字节?您知道如何在 WCF Web API 上更改此值吗?
    • 改变 TransferMode 和 MaxReceivedMessageSize 已经解决了这个问题。非常感谢。
    • @DarrelMiller 我听说 Preview 5 内置了 FileUpload 功能。在哪里可以找到示例实现?
    【解决方案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));
    

    我喜欢!

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      相关资源
      最近更新 更多