【问题标题】:Android uploading file as ByteArray to WCF REST servicesAndroid将文件作为ByteArray上传到WCF REST服务
【发布时间】:2012-01-26 15:34:55
【问题描述】:

我需要使用 WCF 休息服务发送一个字节数组文件。我必须在 android 中使用 HttpPost 方法发送数据。我使用的代码将状态为 HTTP/1.1 400 Bad Request 错误。

  private final static String URI = "http://192.168.1.15/QueryService/Import/Test";
         final HttpPost request = new HttpPost(URI);
            final HttpClient httpClient = new DefaultHttpClient();
            final ByteArrayEntity entity = new ByteArrayEntity(fileToBytes(pathToOurFile));
            entity.setContentType("application/octet-stream");
            entity.setChunked(true);
            request.setEntity(entity);
            final HttpResponse hr = httpClient.execute(request);
           final StatusLine status = hr.getStatusLine();
        httpClient.getConnectionManager().shutdown();

【问题讨论】:

    标签: android android-service wcf-rest


    【解决方案1】:

    很难判断您的请求有什么问题。解决此类错误的标准方法是:

    • 为您的服务创建一个 WCF 客户端。验证它是否按预期工作。
    • 使用Fiddler 或其他合适的工具来拦截客户端正在生成的HTTP 请求。标题和正文都很重要。
    • 修改您的 Android 请求以生成与 WCF 客户端完全相同的请求。

    【讨论】:

    • 我使用 Fiddler,但它没有显示我的应用程序发出的 http 请求。我还将模拟器代理更改为提琴手 ip 地址。当我通过模拟器浏览任何网站时,它会显示在 Fiddler 中,但不会在 fiddler 中显示我的应用程序请求。同样的代码也适用于 StringEntity,但在 Fiddler 中不显示任何进程。
    • 这听起来像是模拟器问题。您可以使用中间客户端轻松拦截请求。我过去成功地使用了code.google.com/p/tcpmon
    • 我可以将请求发送到服务,但似乎我发送的请求格式不正确,我必须在 Web 服务中接收。我也尝试通过多方以流格式发送数据,但没有得到任何响应。
    【解决方案2】:

    我也面临 WCF 服务的同样问题。 400 Bad request 表示您传递给方法的请求参数值与方法的参数不匹配。我使用 Base64 字符串编码将文件作为方法参数传递。希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2010-09-08
      • 2012-07-15
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多