そのままの操作は機能しません-複数のパラメーターがあるため、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
});