4

Web サービスにアップロードしたいファイルがありますが、追加のパラメーターが必要なので、関連する名前と値のペアを含むいくつかの非表示フィールドを作成して、サーバー要求にプッシュします。ただし、問題はサービスの定義です。

[エラー]

コントラクト 'IFormServices' の操作 'NewImage' には複数の要求本文パラメーターがあり、そのうちの 1 つはストリームです。Stream がパラメーターの場合、本体に他のパラメーターを含めることはできません。

[インターフェース]

[OperationContract]
    [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Json)]
    string NewImage(Stream data, string server,string datasource, string document, string image_id);

[意味]

public string NewImage(Stream data, string server, string datasource, string document, string image_id)
        {
        //this should, similar to others, need a server, datasource, and some sort of document in which to append the images.
        WebClient wsb = new WebClient();
        string str = "_URL_";
        byte[] byte_data = new byte[data.Length];
        data.Read(byte_data, 0, byte_data.Length);
        byte[] response = wsb.UploadData(str,"POST",byte_data);
        string retVal = Convert.ToString(response);
        //want to return a JSON.serialized dictionary of:  given image_id + id returned from response.
        Dictionary<string, object> retDict = new Dictionary<string, object>();
        retDict["filename"] = image_id;
        retDict["id"] = "";
        //return new JavaScriptSerializer().Serialize(json);
        return "-1";
        }

【ジャバスクリプトコード】

var $form = $("<form />").attr({
                method: "POST",
                enctype: "multipart/form-data",
                target: "image_processing",
                action: "webservices/FormServices.svc/NewImage",
                id: "push_image_to_server"
            } ).appendTo( "body" );
            var im_id = $( this ).attr( "image_id" );
            $( this ).appendTo( "form#push_image_to_server" );
            $( "<input type='hidden' />" ).attr( { name: "server", value: BASE_URL } ).appendTo( $form );
            $( "<input type='hidden' />" ).attr( { name: "datasource", value: SELECTED_DATASOURCE } ).appendTo( $form );
            $( "<input type='hidden' />" ).attr( { name: "document", value: SELECTED_DOCUMENT } ).appendTo( $form );
            $( "<input type='hidden' />" ).attr( { name: "image_id", value: im_id } ).appendTo( $form );
            $("iframe#image_processing").bind("load", function (a,b,c) {
                console.log("SUCCESS", arguments);
                $( "iframe#image_processing" ).unbind( "load", function (a,b,c)
                {
                    console.log( arguments );
                    _IMAGE_UPLOADS_[a["filename"]] = a["id"];
                } );
                $( "form#push_image_to_server" ).remove();
            } );

そのため、4 つの文字列 + ファイルをサーバーに送信する方法を見つけようとしています。

これはどのように行われますか?

編集:エラーコードを一番上に置きます。

4

6 に答える 6

1

ちょっと考えてみてください - HTTP ヘッダーを使用するのはどうですか? その後、 を使用して処理できますWebOperationContext.IncomingRequest

于 2013-11-01T17:04:01.413 に答える
1

を使用してはHttpRequest.QueryString[]どうですか?

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, UriTemplate = "NewImage")]
string NewImage(Stream data);

次のような URL から呼び出します。

\NewImage?server={server}&datasource={datasource}&document={doc}&image_id={id}

次に、コードで:

public string NewImage(Stream imgStream)
{
    var request = System.Web.HttpContext.Current.Request;

    var server= request.QueryString["server"];
    var datasource = request.QueryString["datasource"];
    var document= request.QueryString["document"];
    var image_id= request.QueryString["image_id"];

    ...
}

このようなものをずっと探していたのですが、今日偶然見つけました。

于 2017-03-29T03:58:52.920 に答える
0

メソッドのstring結果パラメーターNewImageがある種の一意の識別子である場合NewImageAttributes、追加のデータを一意の識別子と共に受け入れるようなものと呼ばれる 2 番目のメソッドを作成し、サービスでデータを再び結び付けることができます。

もちろん、これはサービスへの 2 つの呼び出しを意味しますが、問題が解決する可能性があります。

于 2013-11-01T16:22:17.987 に答える