我正在尝试将操作结果从 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>
问题是,无论服务器是否抛出异常并且设置的 StatusCode 不是 200,总是会调用成功。
也尝试使用 FaultException 无济于事。
我实际上得到了“HTTP/1.1 400”的响应标头“响应”,但我想调用“错误”回调,并获得完整的状态码......
关于我做错了什么的建议?
提前致谢。