0

WCF を MonoDroid に実装しようとしています。この点に関しては、MonoTouch と大きな違いはないと思います。そして調査した結果、BasicHttpBinding 以外の WCF バインディング モードのサポートが見つかりませんでした。

正直なところ、私はWCFがまったく得意ではないので、ランダムに方法を試しました。文字列やバイト[]などでサーバーからメッセージを取得できますが、大きなデータをアップロードしたい場合など。画像または音声の場合、big byte[] を含むアップロード メッセージは 8192 バイト未満に制限する必要があります。これにより、アップロードが失敗します。

今私ができることは、大きな byte[] を Base64String に変換し、それを 8000 バイトの断片に分割し、UploadAsyn(orderNumber, uploadStringBlock) のような一連のコマンドを実行し、サーバーでそれらを orderNumber で再構成することです。Base64string からバイトに変換し直します。とても忙しくてばかげています!

そうでなければ、携帯電話からの大きなファイルのアップロードを解決する別の方法を考えなければなりません。

そして、WCF コーディング内ですべてのアクションを完全に達成できないのは、本当に残念であり、問​​題です。

モノがそれを改善することを願っています。そして、助けがあれば歓迎し、感謝します。

4

1 に答える 1

0

最善の策は、WCF を使用してデータをアップロードするのではなく、プレーンな HTTP 転送を使用することです。WCF を使用してアップロード トークンを安全に取得します。アップロード トークンは、HTTP POST を実行できるアドレスと、POST をアップロードしているユーザー/状態に関連付けるためのパラメーターの両方をエンコードする単なる URL である可能性があります。

たとえば、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.
}
于 2012-09-01T23:13:47.860 に答える