Remoting异常处理:在客户端获取服务器内部错误

摘要:
当服务器和客户端部署在同一台机器上时,可以在客户端成功捕获服务器端错误。我根据错误提示修改了服务器的配置文件信息,但客户端仍然无法捕获服务器内部异常的详细信息。在上一个项目中,我使用Windows服务作为远程处理的服务器主机。服务框架用于管理注册到服务器的远程处理服务。˃˃配置˃˃系统。运行时。远程处理˃无法在客户端获取服务器端的内部错误。

Remoting异常处理:在客户端获取服务器内部错误 (转载于http://blog.csdn.net/oneiter/article/details/1616369)

用Remoting技术进行开发有些日子了,其中有个问题一直困扰着我,那就是有关在客户端获取服务器内部错误的问题。当服务器和客户端部署在同一台机器上时,服务器端的错误能够在客户端成功地捕获。但是,一旦当服务器端和客户端被部署到两台不同的机器上时,在客户端只能捕获到一个通用的异常:

System.Runtime.Remoting.RemotingException :服务器遇到内部错误......

这样笼统的错误提示,对于客户端分析错误原因,显然没有什么帮助。我按照错误提示,修改了服务器端的配置文件信息,可是在客户端仍然捕获不到服务器内部异常的详细信息。无奈之余,我只好在服务器端添加了一个错误日志文件,把远程对象在服务器端的异常写到这个日志文件里。客户端出现异常时,登录服务器查看日志。虽然这样对于分析异常,查找错误有所帮助,但是操作不便。

前天在给公司其它部门的人员做培训,讲一些有关Remoting的基础知识时,突然想起自己以前那个项目中可能犯了一个错误。

以前的那个项目中,我用windows服务做Remoting的服务器端宿主。通过一个服务框架,来管理注册到服务器端的Remoting服务。在每个服务注册到服务器端时,我用的是代码注册的方式,而不是配置文件的方式。这样,虽然我在服务器加了一个.config文件,也配置了:

Remoting异常处理:在客户端获取服务器内部错误第1张<?xml version="1.0" encoding="utf-8"?>
Remoting异常处理:在客户端获取服务器内部错误第1张
<configuration>
Remoting异常处理:在客户端获取服务器内部错误第1张  
<system.runtime.remoting>
Remoting异常处理:在客户端获取服务器内部错误第1张    
<customErrors mode="off" />
Remoting异常处理:在客户端获取服务器内部错误第1张  
</system.runtime.remoting>
Remoting异常处理:在客户端获取服务器内部错误第1张
</configuration>

在客户端却依然获取不到服务器端的内部错误。解决这个问题的方法是,在服务器端添加两行代码:

Remoting异常处理:在客户端获取服务器内部错误第1张//远程抛出错误
Remoting异常处理:在客户端获取服务器内部错误第1张
RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;
Remoting异常处理:在客户端获取服务器内部错误第1张RemotingConfiguration.CustomErrorsEnabled(
false);

经测试,问题解决了。

总结一下:在客户端获取服务器端内部错误的方法有两种,各有自己的适用情况。

1、当在服务器端通过配置文件实现服务注册时,即

Remoting异常处理:在客户端获取服务器内部错误第1张RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

时,则在配置文件中<system.runtime.remoting>加入<customErrors mode="off" />即可实现。

2、当在服务器端通过代码实现服务注册时,即类似

Remoting异常处理:在客户端获取服务器内部错误第1张RemotingConfiguration.RegisterWellKnownServiceType
Remoting异常处理:在客户端获取服务器内部错误第1张                    (
Remoting异常处理:在客户端获取服务器内部错误第1张                    
typeof(RemotingAdminObject),
Remoting异常处理:在客户端获取服务器内部错误第1张                    
"RemotingAdmin",
Remoting异常处理:在客户端获取服务器内部错误第1张                    WellKnownObjectMode.Singleton
Remoting异常处理:在客户端获取服务器内部错误第1张                    );

时,则要通过以下的代码实现:

Remoting异常处理:在客户端获取服务器内部错误第1张//远程抛出错误
Remoting异常处理:在客户端获取服务器内部错误第1张
RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;
Remoting异常处理:在客户端获取服务器内部错误第1张RemotingConfiguration.CustomErrorsEnabled(
false);

免责声明:文章转载自《Remoting异常处理:在客户端获取服务器内部错误》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#光盘刻录P1155 双栈排序(二分图染色)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle 异常处理汇总

Oracle 异常处理汇总 1、plsql无法连接 安装oracle,中间录入密码,用户是:sys,pass: 录入的密码。 连接数据库,建议创建新的用户,最好别直接用sys 安装完毕,则需要配置Net Configration Assistant,才能通过pl/sql连接 确保服务监听服务已经启动 2、遇到ORACLE错误12514 解决方案: 1)...

Abp vNext异常处理的缺陷/改造方案

吐槽Abp Vnext异常处理! 哎呀,是一个喷子 目前项目使用Abp VNext开发,免不了要全局处理异常、提示服务器异常信息。 1. Abp官方异常处理 Abp项目默认会启动内置的异常处理,默认不将异常信息发送到客户端。 在AppModule文件ConfigureServices方法中使用以下代码: Configure<AbpException...

cookie详解

背景 在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cookie规范定义了服务器和客户端交互信息的格式、生存期、使用范围、安全性。 在JavaScript中可以通过 document.cookie 来读取或设置这些信息。由于 cookie 多用在客户端和服务端之间进行通信,所以除了JavaScript以...

《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO

1、前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑。但是在ArcGIS Runtime SDK for Android的版本中并没有提供类似的功能,实现过程相对较复杂。(10.2.8及以下版本需要用户自定义扩展...

Java中Error和Exception的异同以及运行时异常(Runtime exception)与检查型异常(checked exception)的区别

一:Error和Exception的基本概念: 首先Exception和Error都是继承于Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。 Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类,Exception和...

apache benchmark 的简单安装与测试

1. 下载apache benchmark Copy From https://blog.csdn.net/fyqaccpt96/article/details/43272001 yum install apr-util yum-utils yum-utils.noarch mkdir /apache && cd /apache...