// 自定义错误处理: 屏蔽发送给客户端错误信息,自己处理错误信息
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;
}
分享到:
相关推荐
例如,检查HTTP状态码以确认请求是否成功,或者捕获解析JSON时可能抛出的异常。 7. **安全考虑**:在实际应用中,考虑到数据的安全性,可能需要实现身份验证机制,如基本认证或OAuth。此外,敏感数据应使用HTTPS...
如果不存在,将抛出异常。 - **Order**: 如果设置,序列化和反序列化会按照成员的定义顺序进行,这对于依赖成员顺序的场景很重要。 - ** EmitDefaultValue**: 如果设置为`true`,即使属性值为默认值,也会在序列化...
“wcf6学习之会话状态.doc”可能包含了关于如何在WCF中优雅地处理异常的策略,包括如何在服务端抛出和捕获异常,以及如何向客户端传递错误信息。 “会话状态”(同样在“wcf6学习之会话状态.doc”中探讨)允许服务...
WCF支持在服务中抛出和处理异常。默认情况下,未捕获的异常会被转换为错误消息返回给调用者。可以自定义错误处理策略,以提供更友好的错误信息。 6. **会话状态** 会话状态允许服务跟踪和维护与客户端的交互历史...
WCF允许在服务中抛出异常,并将其转换为 SOAP 错误,以便客户端能够理解。默认情况下,所有未处理的异常都会被转化为FAILOPERATION异常。 6. **会话状态** 会话允许客户端和服务之间保持持久性连接,提供状态维护...
8. **错误处理和异常**:WCF支持事务和错误处理机制,通过 FaultContract 特性,服务可以向客户端抛出有意义的错误信息。 9. **安全**:WCF提供多种安全模式,如传输安全(Transport Security)和消息安全(Message...
- **定义**:当安全性协商失败时抛出的异常。 - **处理**: - 检查安全性配置。 - 确认凭据有效。 #### 三十六、WCF 只读属性 - **定义**:在数据合同中定义只读属性。 - **实现**: - 使用`DataMember`属性。 ...
通常,WCF服务会抛出SoapFault或HttpStatusCode异常,客户端需要捕获并处理这些异常。 6. **安全考虑**:为了保护数据的安全,我们可能需要在WCF服务上启用身份验证、授权和加密功能。例如,可以使用基本身份验证、...
可以使用`IAsyncResult.AsyncWaitHandle`等待异步操作完成,或者在End方法中捕获可能抛出的异常。 8. **UI更新** 由于Silverlight的UI线程限制,不能在回调方法中直接更新UI。可以使用Dispatcher.BeginInvoke将...
同时,WCF服务可能会抛出FaultException或其他异常,这些异常需要被捕获并适当地反馈给用户。 5. **数据序列化和反序列化**:WCF默认使用.NET的数据合同进行序列化和反序列化,但Android使用的是Java对象。因此,...
在客户端,我们可以使用`error`回调处理错误,同时在服务端通过添加`try-catch`块和`FaultException`抛出有意义的错误信息。此外,开启WCF服务的跟踪和日志记录,可以帮助定位问题。 ### 五、性能优化 1. **启用...
// 这里会抛出“被零除异常” return string.Format("You entered: {0}", value); } } ``` 为了使异常信息在服务端可见,我们需要在Web.config文件中配置服务行为,特别是启用`serviceDebug`并设置`...
1. 类型兼容性:反序列化的类必须与序列化时完全相同,包括成员变量的类型和顺序,否则可能会抛出异常。 2. 版本控制:在更新项目时,要考虑序列化类的兼容性,避免因字段添加或删除导致反序列化失败。 3. 安全性:...
5. **异常处理**:由于网络问题或服务端错误,调用Web Service时可能会抛出异常。因此,确保在调用服务时添加适当的异常处理代码。 6. **测试和调试**:在开发过程中,使用Visual Studio的调试工具来检查返回的数据...
4. **异常处理**:Web服务调用可能会抛出异常,需要捕获并适当地处理,例如网络错误、服务不可用或数据验证失败等。 ### 四、源码与工具 在实际开发中,源码和工具的使用至关重要。源码可以帮助理解服务的内部工作...
10. **异常处理**:理解异常的层次结构,知道如何正确抛出、捕获和处理异常,以及如何使用try-catch-finally语句块。 11. **XML与JSON**:掌握XML的解析、创建、序列化,以及JSON的处理,如Newtonsoft.Json库的使用...
3. **异常处理**:良好的源码会包含适当的错误处理,例如文件不存在、无法读写文件或者数据格式不正确时抛出异常。 4. **性能优化**:对于大量数据,源码可能会使用内存流或缓存来减少磁盘I/O操作,提高性能。 5. ...
C#方法可以抛出异常,而JavaScript可以捕获这些异常并显示给用户。同时,使用try-catch结构进行错误处理,以及利用浏览器的开发者工具进行前端调试,都是关键步骤。 7. **性能优化** 为了提高性能,可以采用缓存...
- 在抛出异常时提供有用的错误消息和上下文信息。 **2. 对象初始化:** - 使用对象初始化器来简化对象的创建过程。 - 对于复杂的对象,考虑使用构造函数注入依赖项而不是通过属性或字段直接访问。 **3. 避免使用...
- NullReferenceException:尝试访问null对象的成员时抛出,需确保对象已初始化。 - DivideByZeroException:除以零操作会引发此异常,需要检查除数。 - IndexOutOfRangeException:数组索引越界,确保索引在有效...