由客户端看不到相同类型的Web服务引发的自定义exception(使用共享程序集)
我创建了一个自定义exceptionInvalidSessionException
。 但是,当尝试捕获或评估引发的exception是否属于该类型时,它不起作用。 这意味着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; }
据我所知,抛出的exception是正确的类型。
更多信息:
ex.GetType().FullName
= "System.ServiceModel.FaultException1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"
服务上是否启用了重用类型?
信用到期的信用
Nintey-这个答案9%的功劳归功于Adriano Repetti在本页留下的评论。 我刚刚自己测试了这个解决方案,因为我遇到了与上面问题中描述的完全相同的问题。
问题
参考“配置服务引用”模式窗口; 只是因为你选择“在所有引用的程序集中重用类型”并不意味着它实际上会这样做 – 它似乎是一个懒惰的操作,如果自动生成代码碰巧匹配它,基本上会进行这些引用。
解决方案
因此,如果您实际上检查标记您关心的内容,似乎可以保证使用它而不是可能 。 这是通过将单选按钮从“在所有引用的程序集中重用类型”更改为“在指定的引用程序集中重用类型”(第二个单选按钮选项)来实现的。
我的支持意见
这似乎特别影响了FaultExceptions,我不知道为什么,但确实如此。 我的项目中的FaultExceptions是在服务引用的命名空间下生成的,而不是从引用的程序集中重用它们。
特别令人费解的是,当您查看服务引用代码的Reference.cs时,会专门描述namspace。 即便如此,直到我完成上述描述之后才能正常工作。 最后,我只想指出,这是“打破正典”或“不是规范”的一个很好的例子。
我相信你需要使用强类型的FaultException
。 就像是…
免责声明:以下代码尚未经过测试
服务器端
[ServiceContract] public interface ISampleService { [OperationContract] [FaultContractAttribute(typeof(InvalidSessionException)] void SampleMethod(); } void SampleMethod() { ... throw new FaultException(); }
客户端
... try { _wcfChannel.SampleMethod(); catch (FaultException ex) { // take appropriate action } }
额外的阅读
- MSDN: FaultException
- remondo.net: 使用WCF类型的故障exception (一个简单的例子)
- iDesign: WCF故障合同 (示例代码)
- CodeProject: 初学者教程,用于理解WCF中的exception处理,FaultExceptions和FaultContracts
- 添加服务引用提供exception:无法连接到远程服务器
- 分层架构中的entity framework?
- 如何限制对WCF中某些方法的访问?
- Web聊天应用程序 – ASP.NET/Jabber/Ajax/WCF/Comet/ReverseAjax – 面临的问题 – 寻求见解
- 如何在类库项目中配置entity framework
- 如何在android中获取wcf服务的自定义消息头
- 如何在代码中设置ServiceHostingEnvironment.AspNetCompatibilityEnabled = true(不在配置中).NET / C#
- c#TimeZoneInfo序列化
- .net Web服务最佳实践…… SRP?