首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

WCF客户端的错误处理

2013-10-18 
WCF客户端的异常处理小弟在用WCF的时候总会出现很多异常例如不能连接服务器 和 不能联网都会出错在客户端

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.

热点排行