【问题标题】:file streaming from Android to WCF文件从 Android 流式传输到 WCF
【发布时间】:2011-10-15 15:59:33
【问题描述】:

我有以下合同:

[OperationContract(Name = "Upload")]
        [WebInvoke(Method = "POST", UriTemplate = "/Upload/{step}/{fileName}",
            BodyStyle= WebMessageBodyStyle.WrappedRequest)]
        Response FileUpload(string fileName, string step, Stream fileStream);

以及实现:

public Response FileUpload(string fileName, string step, Stream fileStream)
        {
            FileStream fileToUpload = new FileStream("C:\\inetpub\\wwwroot\\Upload\\" + fileName, FileMode.Create);

            byte[] bytearray = new byte[10000];
            int bytesRead, totalBytesRead = 0;
            do
            {
                bytesRead = fileStream.Read(bytearray, 0, bytearray.Length);
                totalBytesRead += bytesRead;
            } while (bytesRead > 0);

            fileToUpload.Write(bytearray, 0, bytearray.Length);
            fileToUpload.Close();
            fileToUpload.Dispose();

            Response res = new Response();
            res.Successful = true;
            res.Comment = "Bla bla";
            return res;
        }

及配置:

 <system.serviceModel>
    <client>
      <endpoint address="" binding="webHttpBinding"
                bindingConfiguration="StreamHTTP"
                contract="BillboardServices.IBillboardService"
      />
    </client>
    <bindings>
      <webHttpBinding>
        <binding name="StreamedHTTP"
                 transferMode="StreamedRequest"
                 maxReceivedMessageSize="10000000"
                 maxBufferSize="1000"
                 />

      </webHttpBinding>

    </bindings>

  </system.serviceModel>

当我通过 Android http 请求调用该方法时,我得到状态码 400 - Bad Request。 我在同一个 Web 服务上有其他方法,它们正在工作。 我就是不知道问题出在哪里。

【问题讨论】:

  • 使用 Wireshark 检查实际有线流量。
  • 感谢您的想法。我在 Android 端和服务器端都试过了,它看起来就像一个普通的多部分帖子。我不是一个大网络奇才,但对我来说看起来不错。

标签: android wcf


【解决方案1】:

我根据您上面发布的代码设置了一个测试服务器。

我使用 Fiddler 执行了以下操作...

POST http://localhost:3333/upload/step/filenameHTTP/1.1

用户代理:提琴手

主机:本地主机:3333

内容长度:11

<Foo></Foo>

在服务器上,我将您的代码稍微调整为类似这样...

 public string FileUpload(string fileName, string step, Stream fileStream)
    {
        StreamReader reader = new StreamReader(fileStream);
        Console.WriteLine(reader.ReadToEnd());
        return "Done";
    }

我没有问题。代码运行良好。

您确定您使用的 URI 模板没有与其他端点发生冲突吗? (通常是 WebGet)

【讨论】:

  • 好吧,我创建了一个新项目。这次我使用了 WCF ajax 服务而不是 WCF 服务应用程序,现在一切正常。你是唯一一个回复的人,所以......玩得开心:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多