【问题标题】:jQuery Forms: how to pass error to client from a WCF servicejQuery Forms:如何将错误从 WCF 服务传递给客户端
【发布时间】:2013-08-12 12:36:21
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: jquery wcf


    【解决方案1】:

    每次都肯定成功。因为到您的 Web 服务的连接有效并且 Web 服务返回结果。由于服务器端出现问题,您的 ajax 函数不知道 Web 服务返回错误。您必须在成功函数中解析返回值,然后制定如何处理它的规则。错误函数只有在前端和 web 服务的连接发生错误时才会被调用。

    【讨论】:

    • 我明白了,谢谢。有什么方法可以调用“错误”回调?谢谢
    • 我不知道您的服务有什么样的返回值,但我只想添加一个包含错误消息的附加返回参数。 Web服务成功时将其留空,当您发现错误时将错误消息放入。在客户端的成功函数中,您只需检查此参数是否为空,并根据该参数决定如何继续用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2010-09-24
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多