我正在尝试将操作结果从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”的响应标题“Response”,但是我希望调用“错误”回调,并获得完整的状态代码......
关于我做错了什么的建议?
提前致谢。
答案 0 :(得分:0)
每次打电话都是肯定的。因为与Web服务的连接有效,Web服务返回结果。您的ajax函数不知道Web服务因服务器端的问题而返回错误。您必须解析成功函数中的返回值,然后制定规则如何处理它。只有在前端连接和Web服务之间发生错误时才会调用错误函数。