jQuery Forms:如何从WCF服务向客户端传递错误

时间:2013-08-12 12:36:22

标签: jquery wcf

我正在尝试将操作结果从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”,但是我希望调用“错误”回调,并获得完整的状态代码......

关于我做错了什么的建议?

提前致谢。

1 个答案:

答案 0 :(得分:0)

每次打电话都是肯定的。因为与Web服务的连接有效,Web服务返回结果。您的ajax函数不知道Web服务因服务器端的问题而返回错误。您必须解析成功函数中的返回值,然后制定规则如何处理它。只有在前端连接和Web服务之间发生错误时才会调用错误函数。