我创建了一个自定义异常 InvalidSessionException
。但是,当 try catch 或评估引发的异常是否属于该类型时,它不起作用。这意味着 EX is
和 Catch Ex
,不要评估为 InvalidSessionException
try
{
acc = this.fda.GetAccountHeader(this.selectedTicket.AccountId);
}
catch (Exception ex)
{
if (ex is Enterprise.Data.InformationModel.CustomExceptions.InvalidSessionException)
{
this.lblError.Text = Resources.Resource.error_sessionedTimedOut;
this.MPError.Show();
}
return;
}
我也试过了(结果没有任何区别)
catch (Enterprise.Data.InformationModel.CustomExceptions.InvalidSessionException ex)
{
this.lblError.Text = Resources.Resource.error_sessionedTimedOut;
this.MPError.Show();
return;
}
catch (Exception ex)
{
return;
}
据我所知,抛出的异常是正确的类型。
更多信息:
ex.GetType().FullName
= "System.ServiceModel.FaultException1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken =b77a5c561934e089]]"
服务是否启用了重用类型?
最佳答案
信用到期的信用
此答案百分之九的功劳归功于 Adriano Repetti 留下的评论在此页。我刚刚自己测试了这个解决方案,因为我遇到了与上述问题中描述的完全相同的问题。
问题
引用“Configure Service Reference”模态窗口;仅仅因为您选择“在所有引用的程序集中重用类型”并不意味着它实际上会这样做——这似乎是一个惰性操作,基本上如果自动生成代码 发生匹配它。
解决方案
因此,如果您真的勾选了您关心的内容,它似乎肯定会被使用,而不是可能。这是通过将单选按钮从“在所有引用的程序集中重用类型”更改为“在指定的引用程序集中重用类型”(第二个单选按钮选项)来实现的。
我的支持性观察
这似乎特别影响 FaultExceptions,我不知道为什么,但确实如此。我项目中的 FaultExceptions 是在服务引用的命名空间下生成的,而不是从引用的程序集中重新使用它们。
尤其令人费解的是,在查看服务引用代码的Reference.cs时,居然专门描述了namspace。即便如此,在我执行上述操作之前它还是无法正常工作。最后我只想指出,这是“打破规范”或“不规范”的一个很好的例子。
关于c# - Web 服务抛出的自定义异常未被客户端视为相同类型(使用共享程序集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712231/