读书人

WCF客户端的错误处理

发布时间: 2013-10-18 20:53:13 作者: rapoo

WCF客户端的异常处理
小弟在用WCF的时候总会出现很多异常
例如不能连接服务器 和 不能联网都会出错
在客户端 我写了一些方法

/// <summary>
/// 在客户端专门写一个调用服务器方法的类
/// 方便管理调用方法时出现的问题
/// </summary>
public class LoginContractUsed : ILoginContract
{
ILoginContract proxy = null;
public LoginContractUsed()
{
try
{
ChannelFactory<ILoginContract> fact = new ChannelFactory<ILoginContract>("ILoginContract");
proxy = fact.CreateChannel();
}
catch (Exception e)
{
//在异常的时候 调用一个委托 将错误的方法名和类 以及 异常抛出
if (StaticWcfException.OnWcfException != null)
{
StaticWcfException.OnWcfException("LoginContractUsed", this.GetType(), e);
}
}
}
//真正的方法调用
public string Login(string UserName, string UserPwd)
{
try
{
//返回实际服务器信息
return proxy.Login(UserName, UserPwd);
}
catch(Exception e)
{
//如果出错调用本地统一管理委托
if (StaticWcfException.OnWcfException != null)
{
StaticWcfException.OnWcfException("LoginContractUsed", this.GetType(), e);
}
throw;
}
}
}

在这其中继承的ILoginContract是服务器的Contract的内个接口
由于我想知道 真正连接不上服务器 或者服务器抛出错误
我不想让程序 崩溃 但是每一个方法都要加Try-Catch有没有好的方法来处理这些问题
[解决办法]
可以将Service端的异常包装成正常的Message 输出,实现IErrorHandler接口.

如果想在程序端来辨别Servce端的异常,可以加ErrorCode来区分。

例如 手动throw Ex的可以让ErrorCode=1
Service 程序异常 ErrorCode=2
...........

参考
http://www.cnblogs.com/seesea125/archive/2012/10/26/2741652.html
[解决办法]
你服务端可以抓到异常了,现在就是怎么把抓到的异常和你要返回的数据一起打包传给客户端,你查一下WCF的及个扩展,一年前写过,现在忘了
[解决办法]
这只能解决service端的异常信息,可以通过正常的方式返回,如果是Client本身的异常还需要自己处理的,
例如链接超时,调用参数不正确等等。
可以做到不用每个调用的地方都try,那你可以把调用的地方封装起来,统一try.

读书人网 >C#

热点推荐