0

REST を使用してデータを渡す WCF にパラメーターを渡そうとしています。

私のメソッドの定義は次のとおりです。

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json)]
void newUserAndImageEntry(byte[] pArrayImage, string pContentType, string pUserName, string pFileName);

私がしようとしているのは、次のようなものです:

WinJS.xhr({ url: "http://localhost:9814/Student.svc/newUserAndImageEntry" })
    .then(function (r ) {
        DO WHAT?;
    });

しかし、関数で何をすべきか、または事前にパラメーターを渡す必要があるかどうかはわかりません..

4

1 に答える 1

2

そのままの操作は機能しません-複数のパラメーターがあるため、BodyStyleプロパティを次のように定義する必要がありますWrapped(またはWrappedRequest-シナリオでは、操作に戻り値がないため、問題ではありません):

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           BodyStyle = WebMessageBodyStyle.WrappedRequest)]
void newUserAndImageEntry(byte[] pArrayImage, string pContentType,
    string pUserName, string pFileName);

もう 1 つの問題は、バイト配列はおそらく JavaScript からデータを受け取るのに適した型ではないということです。これはあまり効率的ではない数値の配列として受け取られます。たとえば、バイトをbase64としてエンコードするために、クライアントで前処理を行うと、ペイロードが小さくなります

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           BodyStyle = WebMessageBodyStyle.WrappedRequest)]
void newUserAndImageEntry(string pArrayImageAsBase64, string pContentType,
    string pUserName, string pFileName);

クライアント側ではdata、パラメータとして渡すオブジェクトのフィールドにパラメータを渡す必要があります。以下のコードのようなもの。呼び出しの詳細については、 WinJS.xhr のドキュメントを確認してください。

var arrayImage = getArrayImage();
var arrayImageBase64 = convertToBase64(arrayImage);
var contentType = 'image/jpeg';
var userName = 'johndoe';
var fileName = 'balls.jpg';
var data = {
    pArrayImageAsBase64: arrayImageBase64,
    pContentType: contentType,
    pUserName: userName,
    pFileName: fileName
};
var xhrOptions = {
    url: "http://localhost:9814/Student.svc/newUserAndImageEntry",
    headers: { "Content-Type": "application/json" },
    data: JSON.stringify(data)
};
WinJS.xhr(xhrOptions).done(
    function (req) {
        // Call completed, find more info on the parameter
    }, function (req) {
        // An error occurred, find more info on the parameter
    });
于 2013-04-02T17:52:19.023 に答える