`
zheyiw
  • 浏览: 1017531 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

wcf 异常 抛出json格式的异常消息

阅读更多
// 自定义错误处理: 屏蔽发送给客户端错误信息,自己处理错误信息
    public class ErrorHandler : IErrorHandler
    {
        string time = ""; //记录错误发生的时间,以便到日志文件中查询错误信息

        //由于调用 ProvideFault 时,客户端处于阻塞状态,不要在这里进行长时间的操作
        public void ProvideFault(Exception error, MessageVersion version, ref Message msg)
        {
            //避免敏感信息泄漏,例如:数据库配置, error包含的错误信息应该记录到服务器的日志中,不能显示给客户端
            // FaultException<int> e = new FaultException<int>(123, error.Message);
            DateTime now = DateTime.Now;
            time = now.ToString("yyyyMMddHHmmssfff", DateTimeFormatInfo.InvariantInfo);// "" + now.Year.ToString() + now.Month.ToString() + now.Day.ToString() + now.Hour.ToString() + now.Minute.ToString() + now.Second.ToString() + now.Millisecond.ToString();
            string errorMsg = "服务内部错误_" + time;
            // FaultException fe = new FaultException(errorMsg);
            // MessageFault mf = fe.CreateMessageFault();
            // msg = Message.CreateMessage(version, mf, fe.Action);//返回的将是一个xml

            //The fault to be returned
            msg = Message.CreateMessage(version, "", errorMsg, new DataContractJsonSerializer(typeof(string)));

            // tell WCF to use JSON encoding rather than default XML
            WebBodyFormatMessageProperty wbf = new WebBodyFormatMessageProperty(WebContentFormat.Json);

            // Add the formatter to the fault
            msg.Properties.Add(WebBodyFormatMessageProperty.Name, wbf);

            //Modify response
            HttpResponseMessageProperty rmp = new HttpResponseMessageProperty();

            // return custom error code, 500.
            rmp.StatusCode = System.Net.HttpStatusCode.InternalServerError;
            rmp.StatusDescription = "InternalServerError";

            //Mark the jsonerror and json content
            rmp.Headers[HttpResponseHeader.ContentType] = "application/json";
            rmp.Headers[HttpResponseHeader.ContentEncoding] = "utf-8";
            rmp.Headers["jsonerror"] = "true";

            //Add to msg
            msg.Properties.Add(HttpResponseMessageProperty.Name, rmp);
        }


        //HandleError 在异常返回给客户端之后被触发
        //自定义错误信息,例如在数据库中添加一个记录
        public bool HandleError(Exception error)
        {
            string errorMsg = error.Message + " ===== " + error.StackTrace;
            Logger logger = LogManager.GetCurrentClassLogger();
            logger.Error(time + " ===== " + errorMsg);//文本日志
            LgcComm.AddLog(errorMsg, time);//数据库日志
            return false;
        }
分享到:
评论

相关推荐

    android链接WCF

    例如,检查HTTP状态码以确认请求是否成功,或者捕获解析JSON时可能抛出的异常。 7. **安全考虑**:在实际应用中,考虑到数据的安全性,可能需要实现身份验证机制,如基本认证或OAuth。此外,敏感数据应使用HTTPS...

    数据契约之WCF与序列化

    如果不存在,将抛出异常。 - **Order**: 如果设置,序列化和反序列化会按照成员的定义顺序进行,这对于依赖成员顺序的场景很重要。 - ** EmitDefaultValue**: 如果设置为`true`,即使属性值为默认值,也会在序列化...

    wcf基础学习

    “wcf6学习之会话状态.doc”可能包含了关于如何在WCF中优雅地处理异常的策略,包括如何在服务端抛出和捕获异常,以及如何向客户端传递错误信息。 “会话状态”(同样在“wcf6学习之会话状态.doc”中探讨)允许服务...

    WCF学习笔记(有代码有图)

    WCF支持在服务中抛出和处理异常。默认情况下,未捕获的异常会被转换为错误消息返回给调用者。可以自定义错误处理策略,以提供更友好的错误信息。 6. **会话状态** 会话状态允许服务跟踪和维护与客户端的交互历史...

    WCF学习笔记,wcf实用知识

    WCF允许在服务中抛出异常,并将其转换为 SOAP 错误,以便客户端能够理解。默认情况下,所有未处理的异常都会被转化为FAILOPERATION异常。 6. **会话状态** 会话允许客户端和服务之间保持持久性连接,提供状态维护...

    WCF实例及文档

    8. **错误处理和异常**:WCF支持事务和错误处理机制,通过 FaultContract 特性,服务可以向客户端抛出有意义的错误信息。 9. **安全**:WCF提供多种安全模式,如传输安全(Transport Security)和消息安全(Message...

    WCF学习笔记,一步一步教你学习WCF

    - **定义**:当安全性协商失败时抛出的异常。 - **处理**: - 检查安全性配置。 - 确认凭据有效。 #### 三十六、WCF 只读属性 - **定义**:在数据合同中定义只读属性。 - **实现**: - 使用`DataMember`属性。 ...

    android wcf webservice客户端+服务器

    通常,WCF服务会抛出SoapFault或HttpStatusCode异常,客户端需要捕获并处理这些异常。 6. **安全考虑**:为了保护数据的安全,我们可能需要在WCF服务上启用身份验证、授权和加密功能。例如,可以使用基本身份验证、...

    Silverlight异步调用WCF接口(非常简单易懂)

    可以使用`IAsyncResult.AsyncWaitHandle`等待异步操作完成,或者在End方法中捕获可能抛出的异常。 8. **UI更新** 由于Silverlight的UI线程限制,不能在回调方法中直接更新UI。可以使用Dispatcher.BeginInvoke将...

    Android连接IIS部署的WCF服务

    同时,WCF服务可能会抛出FaultException或其他异常,这些异常需要被捕获并适当地反馈给用户。 5. **数据序列化和反序列化**:WCF默认使用.NET的数据合同进行序列化和反序列化,但Android使用的是Java对象。因此,...

    jquery调用wcf

    在客户端,我们可以使用`error`回调处理错误,同时在服务端通过添加`try-catch`块和`FaultException`抛出有意义的错误信息。此外,开启WCF服务的跟踪和日志记录,可以帮助定位问题。 ### 五、性能优化 1. **启用...

    解析Silverlight调用WCF/Rest异常的解决方法

    // 这里会抛出“被零除异常” return string.Format("You entered: {0}", value); } } ``` 为了使异常信息在服务端可见,我们需要在Web.config文件中配置服务行为,特别是启用`serviceDebug`并设置`...

    C#序列化与反序列化

    1. 类型兼容性:反序列化的类必须与序列化时完全相同,包括成员变量的类型和顺序,否则可能会抛出异常。 2. 版本控制:在更新项目时,要考虑序列化类的兼容性,避免因字段添加或删除导致反序列化失败。 3. 安全性:...

    c# webService 天气

    5. **异常处理**:由于网络问题或服务端错误,调用Web Service时可能会抛出异常。因此,确保在调用服务时添加适当的异常处理代码。 6. **测试和调试**:在开发过程中,使用Visual Studio的调试工具来检查返回的数据...

    WebServie创建部署调用

    4. **异常处理**:Web服务调用可能会抛出异常,需要捕获并适当地处理,例如网络错误、服务不可用或数据验证失败等。 ### 四、源码与工具 在实际开发中,源码和工具的使用至关重要。源码可以帮助理解服务的内部工作...

    .net笔试资料汇总下载

    10. **异常处理**:理解异常的层次结构,知道如何正确抛出、捕获和处理异常,以及如何使用try-catch-finally语句块。 11. **XML与JSON**:掌握XML的解析、创建、序列化,以及JSON的处理,如Newtonsoft.Json库的使用...

    C#序列化与反序列化类-源代码

    3. **异常处理**:良好的源码会包含适当的错误处理,例如文件不存在、无法读写文件或者数据格式不正确时抛出异常。 4. **性能优化**:对于大量数据,源码可能会使用内存流或缓存来减少磁盘I/O操作,提高性能。 5. ...

    CSharp代码与javaScript

    C#方法可以抛出异常,而JavaScript可以捕获这些异常并显示给用户。同时,使用try-catch结构进行错误处理,以及利用浏览器的开发者工具进行前端调试,都是关键步骤。 7. **性能优化** 为了提高性能,可以采用缓存...

    C# coding standard

    - 在抛出异常时提供有用的错误消息和上下文信息。 **2. 对象初始化:** - 使用对象初始化器来简化对象的创建过程。 - 对于复杂的对象,考虑使用构造函数注入依赖项而不是通过属性或字段直接访问。 **3. 避免使用...

    c#知识点自己整理(js,.net,页面控件,及常见错误)

    - NullReferenceException:尝试访问null对象的成员时抛出,需确保对象已初始化。 - DivideByZeroException:除以零操作会引发此异常,需要检查除数。 - IndexOutOfRangeException:数组索引越界,确保索引在有效...

Global site tag (gtag.js) - Google Analytics