C# WCF和错误处理,最佳实践
我有一个理论问题。我有一个WCF web服务,需要与.NET客户端和iPhone应用程序进行对话 在服务中,我有许多方法,如:C# WCF和错误处理,最佳实践,c#,asp.net,.net,wcf,web-services,C#,Asp.net,.net,Wcf,Web Services,我有一个理论问题。我有一个WCF web服务,需要与.NET客户端和iPhone应用程序进行对话 在服务中,我有许多方法,如: User Login(string email,string password); etc.. 如果成功,我希望服务将用户返回给我。否则,我希望服务向我抛出一个自定义异常,例如EmailNotFoundException或PasswordNotCorrectException 我被告知这不是最好的方式,特别是因为iPhone客户端将使用这项服务 我是否应该更改所有方法
User Login(string email,string password); etc..
如果成功,我希望服务将用户返回给我。否则,我希望服务向我抛出一个自定义异常,例如EmailNotFoundException
或PasswordNotCorrectException
我被告知这不是最好的方式,特别是因为iPhone客户端将使用这项服务
我是否应该更改所有方法以返回一些将包含对象
和错误字符串/异常对象的包装器实体
这对我来说很重要,因为有时我需要知道操作失败的原因。如果
Login
返回null,我将知道操作失败,但我不知道原因。您不应该在WCF服务中使用异常来定期与服务的使用者通信。相反,请查看如何创建一个响应对象,该对象包含您需要了解的有关该操作的所有信息
比如:
public class LoginResponse
{
public User User { get; set; }
public string Message { get; set; }
public bool IsSuccessful
{
get { return User != null; }
}
}
LoginResponse Login(string email, string password)
{ ... }
然后,您的登录操作将类似于:
public class LoginResponse
{
public User User { get; set; }
public string Message { get; set; }
public bool IsSuccessful
{
get { return User != null; }
}
}
LoginResponse Login(string email, string password)
{ ... }
这样,如果操作失败,您可以在响应中添加一条消息来解释原因。是WCF错误处理的“正确”方式,但可能不适合您的情况。
您可以使用erros的cods或某种类型的错误类实例作为响应字段,如果成功,响应字段为null…您可以使用常规的Try-Catch异常或RaiseExceptions作为null异常,如果您不确定并且不想假设调用/方法总是会通过,您可以将它们包装在Try-Catch周围。。经验法则是用Try-catch或Try-catch-finally包装所有内容