none
关于wcf restful 开发的问题 RRS feed

  • 问题

  • 服务端是:wcf restful,数据格式:json

    客户端是:winfrom,接受数据格式:json

    问题:客户端如何获取服务端的Exception 信息?

    //服务端代码
    public IList<emp_attachments> SelectAll(string take)
            {
                var ctx = WebOperationContext.Current;
                if (ctx == null) return null;
                ctx.OutgoingResponse.StatusCode = HttpStatusCode.OK;
                try
                {
                    //do something
                }
                catch (Exception ex)
                {
                    ctx.OutgoingResponse.StatusCode = HttpStatusCode.ExpectationFailed;
                    //throw new WebFaultException<string>(ex.Message, HttpStatusCode.Conflict);
                    ctx.OutgoingResponse.StatusDescription = ex.Message;
                    return null;
                }
            }

    客户端代码获取:

    try
                {
                    using (var client = new HttpClient())
                    {
                        using (var result = client.Get(new Uri("http://localhost:9083/IoService.svc/SelectAll/o10")))
                        {
                            result.EnsureStatusIsSuccessful();
                            var strJson = result.Content.ReadAsString();
                           //do something
                        }
                    }
                }
                catch (UriFormatException ex)
                {
                    //url不对
                    Console.WriteLine(ex.Message);
                }
                catch (ArgumentOutOfRangeException ex)
                {
                    //找不到资源 404   跳转 bak服务
                    //NotFound (404) is not one of the following: OK (200), Created (201), Accepted (202), NonAuthoritativeInformation (203), NoContent (204), ResetContent (205), PartialContent (206)
                    Console.WriteLine(ex.Message);
                }
                catch (WebFaultException<string> ex)
                {
                    Console.WriteLine(ex.Message);
                }
                catch (WebFaultException ex)
                {
                    Console.WriteLine(ex.Message);
                }
                catch (HttpProcessingException ex)
                {
                    // 无法连接服务器
                    Console.WriteLine(ex.Message);
                }
                catch (JsonException ex)
                {
                    //序列化对象失败
                    Console.WriteLine(ex.Message);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }

    现在客户端如何获取服务端指定的 "ctx.OutgoingResponse.StatusDescription = ex.Message;" 信息?

    web直接使用:throw new WebFaultException<string>(ex.Message, HttpStatusCode.Conflict) 是可以把错误信息显示在浏览器上的,但是客户端winfrom使用的是"Microsoft.Http"这个微软类库,如何获取错误信息?

    2016年1月6日 2:54

答案

  • 非常感谢您的回答,我下载了Microsoft.Http源代码,我重新编写了源代码,自定义了这个异常信息捕获,谢谢版主您了。
    • 已标记为答案 server 126 2016年1月7日 2:32
    2016年1月7日 2:32

全部回复

  • 您好,

    根据这个问题, 你可以设置

    <serviceDebug includeExceptionDetailInFaults="true"/> 在web.config 文件中。

    另外还可以设置FaultContract 在服务端, 通过FaultContract 在客户端抓取服务端的错误。

    更多信息,请参考下面的链接:

    WCF实现将服务器端的错误信息返回到客户端

    感谢您的支持。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. Click HERE to participate the survey.

    2016年1月7日 2:27
    版主
  • 非常感谢您的回答,我下载了Microsoft.Http源代码,我重新编写了源代码,自定义了这个异常信息捕获,谢谢版主您了。
    • 已标记为答案 server 126 2016年1月7日 2:32
    2016年1月7日 2:32