0

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

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

提前致谢。

4

1 回答 1

0

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

于 2013-08-12T12:52:50.650 回答