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

WebService怎么向Web客户端抛出自定义错误

2012-12-17 
求教:WebService如何向Web客户端抛出自定义异常我想通过WebService向客户端抛出异常,下面是我的代码,但是

求教:WebService如何向Web客户端抛出自定义异常
我想通过WebService向客户端抛出异常,下面是我的代码,但是捕获不到,没法Alert对话框出来。
也不知道是不是不可行还是咋的,我对WebService理解也不是很透彻,希望各位帮忙看看。

WebService


public CrmService()
{
    // 工厂类模拟的客户端激活模式
    try
    {            
        string sChannel = ConfigurationManager.AppSettings["Channel"].ToString() + "RemoteObject";            
        IRemoteObjectFactory objRemoteFactory = (IRemoteObjectFactory)Activator.GetObject(typeof(IRemoteObjectFactory), sChannel);
        objRemote = objRemoteFactory.CreateInstance();
    }
    catch (Exception ex)
    {
        throw new CrmException(ex.Message);
    }
}

客户端调用

try
{
    Service = new CrmService();
}
catch (CrmException ex)
{
    this.Alert(ex.Message);//注册脚本,弹出alert
    return;
}


自定义异常类

[Serializable]
public class CrmException : Exception, ISerializable
{
    private string _message;

    public override string Message {
        get { return _message; }
    }

    //这个一定要有,在序列化时用到
    void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("Message", this._message);
        base.GetObjectData(info, context);
    }

    //这个一定要有,在反序列化时用到
    public CrmException(SerializationInfo si, StreamingContext context) : base(si, context)
    {
        this._message = si.GetString("Message");
    }

    public CrmException(string message)
    {
        _message = message;
    }
}

[最优解释]
确实无法用正常的方式捕捉,在webservice中,所有的服务端异常,都被封装在
System.Web.Services.Protocols.SoapException中了,所以
楼主可以用类似这样的代码捕获自定义的异常


catch (SoapException ex)
        {
            if (ex.Message.IndexOf("CrmException ") > -1)
                   return;
        }


虽不严谨,但似乎也没有更好的办法
[其他解释]
引用:
确实无法用正常的方式捕捉,在webservice中,所有的服务端异常,都被封装在
System.Web.Services.Protocols.SoapException中了,所以
楼主可以用类似这样的代码捕获自定义的异常




C# code

catch (SoapException ex)
        {
            if (ex.Message.IndexOf……



我试过了,这样也没效果
[其他解释]
怎么没人回答呢?
[其他解释]
关于Error有一个专门的章节,你还是看看书吧。

我简单说一下,你只要定义一个出错Contract, 增加一个出错属性就可以了

[其他解释]
类似于这样:

[OperationContract]
[FaultContract(typeof(MyApplicationFault))]

[其他解释]
ws这种后台的东西,为什么要给用户看呢?
直接写在.log文件里,自己看看就可以啦~
[其他解释]
WCF可能更为理想一些
[其他解释]
怎么写log错误日志呢??
[其他解释]
引用:
引用:
确实无法用正常的方式捕捉,在webservice中,所有的服务端异常,都被封装在
System.Web.Services.Protocols.SoapException中了,所以
楼主可以用类似这样的代码捕获自定义的异常


C# code

catch (SoapException ex)
{
if (ex.Message.Inde……


不可能,除非你抛出的不是这个异常!
[其他解释]
引用:
引用:
引用:
确实无法用正常的方式捕捉,在webservice中,所有的服务端异常,都被封装在
System.Web.Services.Protocols.SoapException中了,所以
楼主可以用类似这样的代码捕获自定义的异常


C# code

catch (SoapException ex)
……


搞错了,之前因为异常信息里面有"\n"导致alert出不来,跟了几次发现了。

不过真没有办法直接捕获自定义异常么?
[其他解释]
我不是告诉你了吗,在[OperationContract]
增加
[FaultContract(typeof(MyApplicationFault))]
这里的MyApplicationFault是你定义的出错DataContract,你给这个赋值就行了,出错的时候会返回它的值的
[其他解释]
谢谢楼主了,此题正合我意

热点排行