c# - Web 服务抛出的自定义异常未被客户端视为相同类型(使用共享程序集)

标签 c# wcf web-services exception

我创建了一个自定义异常 InvalidSessionException。但是,当 try catch 或评估引发的异常是否属于该类型时,它不起作用。这意味着 EX isCatch 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;
}

据我所知,抛出的异常是正确的类型。

enter image description here

更多信息:

ex.GetType().FullName = "System.ServiceModel.FaultException1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken =b77a5c561934e089]]"

服务是否启用了重用类型? enter image description here

最佳答案

信用到期的信用
此答案百分之九的功劳归功于 Adriano Repetti 留下的评论在此页。我刚刚自己测试了这个解决方案,因为我遇到了与上述问题中描述的完全相同的问题。

问题
Configure Service Reference window assemblies section

引用“Configure Service Reference”模态窗口;仅仅因为您选择“在所有引用的程序集中重用类型”并不意味着它实际上会这样做——这似乎是一个惰性操作,基本上如果自动生成代码 发生匹配它。

解决方案
因此,如果您真的勾选了您关心的内容,它似乎肯定会被使用,而不是可能。这是通过将单选按钮从“在所有引用的程序集中重用类型”更改为“在指定的引用程序集中重用类型”(第二个单选按钮选项)来实现的。

我的支持性观察
这似乎特别影响 FaultExceptions,我不知道为什么,但确实如此。我项目中的 FaultExceptions 是在服务引用的命名空间下生成的,而不是从引用的程序集中重新使用它们。

尤其令人费解的是,在查看服务引用代码的Reference.cs时,居然专门描述了namspace。即便如此,在我执行上述操作之前它还是无法正常工作。最后我只想指出,这是“打破规范”或“不规范”的一个很好的例子。

关于c# - Web 服务抛出的自定义异常未被客户端视为相同类型(使用共享程序集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712231/

相关文章:

c# - WPF ListBox 在用户滚动时生成项目

c# - 如何使用 MS Open XML SDK 检索一些图像数据和格式?

C# 用两个冒号分割单词

c# - WCF 异常 : The maximum message size quota for incoming messages (65536) has been exceeded

WCF 服务无法识别我自己的数据类型

php - SOAP 已安装但未在 phpinfo 中显示

c# - 在 C# 中将 Excel 列(或单元格)格式化为文本?

c# - IIS/WCF 静态方法线程安全

java - 获取空对象引用如果我在第三个 Activity 之前启动第二个 Activity (如果我直接从第一个移动到第三个 Activity ,则没有错误)

mysql - 根据 MySQL 中的日期选择记录