操作の結果を WCF サービスからクライアントに渡そうとしています。
私のサービスは次のようになります
[OperationContract]
[WebInvoke(UriTemplate = "Upload/{metadata}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
void Upload(string metadata, Stream stream);
public void Upload(string metadata, Stream stream)
{
...
}
catch (Exception e)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.BadRequest;
WebOperationContext.Current.OutgoingResponse.StatusDescription = e.Message;
}
}
私のクライアントは...
<form id="fileUploadForm" method="post" enctype="multipart/form-data">
<div>
<div>
<input type="text" id="fileUploadTitle" name="fileUploadTitle" class="m-wrap" />
</div>
<div>
<input type="file" id="postedFile" name="postedFile" class="m-btn" />
</div>
<div>
<input type="button" id="fileUploadButton" name="fileUploadButton" value="Do Upload" class="m-btn" />
</div>
<div id="fileUploadResult"></div>
</div>
</form>
<script type="text/javascript">
$(function () {
$("#fileUploadButton").click(function () {
$('form').ajaxSubmit(
{
url: '/_vti_bin/UploadService/UploadService.svc/Upload/' + $("#fileUploadTitle").val(),
type: 'POST',
contentType: 'text/plain',
beforeSubmit: function () {
$("#fileUploadResult").html("Uploading...").css("background", "yellow");
},
success: function (r, s, x) {
$("#fileUploadResult").html("File uploaded").css("background", "lime");
},
error: function () {
$("#fileUploadResult").html("File not uploaded").css("background", "red");
}
})
});
});
</script>
問題は、サーバーが例外をスローし、200 以外の StatusCode を設定しているかどうかに関係なく、常に成功が呼び出されることです。
FaultException でも試してみましたが、役に立ちませんでした。
実際には「HTTP/1.1 400」の応答ヘッダー「Response」を取得しますが、呼び出される「エラー」コールバックを取得し、完全なステータス コードを取得したいと考えています...
私が間違っていることについての提案はありますか?
前もって感謝します。