【问题标题】:How to upload large file with WCF in MonoDroid如何在 MonoDroid 中使用 WCF 上传大文件
【发布时间】:2012-09-02 07:13:47
【问题描述】:

我正在尝试在 MonoDroid 中实现 WCF。我认为在这个问题上它和 MonoTouch 没有太大区别。而且经过研究,除了BasicHttpBinding之外,我找不到任何其他WCF绑定模式的支持。

老实说,我一点也不擅长 WCF,所以我只是随机尝试了一些方法。我可以使用字符串和字节 [] 等从服务器获取消息,但是当我想上传大数据时,例如。图片或音频,上传的包含大字节[]的消息必须限制在8192字节以下。这导致我上传失败。

现在我能做的就是把big byte[]转换成Base64String,分割成8000bytes的片段,执行UploadAsyn(orderNumber,uploadStringBlock)之类的一堆命令,然后在服务器中用orderNumber重新重组。并从 Base64string 转换回字节。很忙很傻!

否则我必须想其他办法解决手机上传大文件。

而且不让所有动作都完全在 WCF 编码中实现真的是一个很大的遗憾和问题。

希望 Mono 改进它。如果有任何帮助,欢迎和赞赏。

【问题讨论】:

    标签: c# wcf xamarin.ios xamarin.android basichttpbinding


    【解决方案1】:

    最好不要使用 WCF 上传数据,而是使用普通的 HTTP 传输。使用 WCF 安全地获取上传令牌,该令牌可能只是一个 url,用于编码您可以执行 HTTP POST 的地址以及将 POST 与您正在上传的用户/状态相关联的参数。

    例如,您的 WCF 请求可以这样做:

    string GetTokenForUpload ()
    {
        var uuid = new UUID ();
        db.Insert (key: uuid, for: "upload", login: user.Credentials);
        return base_url + "?id=" + uuid; 
    }
    

    然后在常规 ASHX 处理程序的 POST 处理程序上,您可以执行以下操作:

    PostRequest (HttpRequest req, QueryString qstring)
    {
        id = qstring ["id"];
        if (!db.Lookup (id, out userCredentials))
            error ();
        // accept post for the user.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      相关资源
      最近更新 更多