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


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

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

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

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

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

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

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      
    <system.runtime.remoting>
        
    <customErrors mode="off" />
      
    </system.runtime.remoting>
    </configuration>

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

    //远程抛出错误
    RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;
    RemotingConfiguration.CustomErrorsEnabled(
    false);

    经测试,问题解决了。

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

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

    RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

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

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

    RemotingConfiguration.RegisterWellKnownServiceType
                        (
                        
    typeof(RemotingAdminObject),
                        
    "RemotingAdmin",
                        WellKnownObjectMode.Singleton
                        );

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

    //远程抛出错误
    RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;
    RemotingConfiguration.CustomErrorsEnabled(
    false);

    作者:Jacques Zhu
    出处:http://www.cnblogs.com/Jacques
    本文版权归作者和博客所有,欢迎转载。但未经作者同意,必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    springcloud-Ribbon之手写轮询算法
    springcloud-Ribbon负载均衡规则的替换
    git本地库和远程库的连接和断开
    本地项目第一次提交到码云或github
    python基础语法练习
    Xss-labs-level11-15
    Vulnhub-靶机-ESCALATE_LINUX: 1
    Xss-labs-level7-10
    Vulnhub-靶机-DC: 6
    Jenkins入门之执行Powershell脚本
  • 原文地址:https://www.cnblogs.com/Jacques/p/2501816.html
Copyright © 2020-2023  润新知