当前位置: 首页 > 编程语言 > C#

C#学习教程:.NETRemotingExceptionUnhandledClientSharing

时间:2023-04-11 02:27:01 C#

.NETRemotingExceptionUnhandledClient我检查了其余的远程处理问题,这个具体案例似乎没有得到解决。我有一个.NETRemoting服务器/客户端设置。在服务器端,我有一个对象,它有一个可以抛出异常的方法,以及一个试图调用该方法的客户端。服务器:publicboolMyEquals(GuidmyGuid,stringa,stringb){if(CheckAuthentication(myGuid)){logger.Debug("Requestfor""+a+"".Equals(""+b+"")");返回a.Equals(b);}else{thrownewAuthenticationException(UserRegistryService.USER_NOT_REGISTERED_EXCEPTION_TEXT);}}客户端:try{boolresult=RemotedObject.MyEquals(myGuid,"cat","dog");}catch(Services.Exceptions.AuthenticationExceptione){Console.WriteLine("您无权执行该操作");当我使用导致CheckAuthentication返回false的Guid调用MyEquals时,.NET尝试抛出异常并说AuthenticationExceptionwasunhandled。这发生在服务器端。这个异常永远不会被分类到客户端,我不明白为什么。我见过的所有问题都解决了客户端处理异常的问题,但这不是自定义异常,而是一种基本类型。就我而言,我什至无法在没有任何异常的情况下远程连接到客户端。这是AuthenticationException的副本。它位于服务器和客户端之间的共享库中。[序列化]publicclassAuthenticationException:ApplicationException,ISerializable{publicAuthenticationException(stringmessage):base(message){}publicAuthenticationException(SerializationInfoinfo,StreamingContextcontext):base(info,context.(SerializationInfoinfo,StreamingContextcontext){base.GetObjectData(info,context);}#endregion}首先,不要继承ApplicationException。这个建议已经有一段时间了,我相信FxCop会自动生成消息。接下来,你通常应该用[Serializable]属性。我认为这是你的主要问题,因为我在方法调用中得到一个异常,说AuthenticationException未标记为可序列化。在客户端尝试catch(Exception),并检查捕获的异常的类型以及任何内部异常。它可能会提供一些线索。一些其他评论:我的可序列化自定义异常的模板如下所示,我在通过远程连接序列化它时没有遇到任何问题。[Serializable]publicclassCustomException:Exception{//////初始化类的新实例。///publicCustomException(){}//////使用指定的错误消息///初始化类的新实例。///publicCustomException(stringmessage):base(message){}//////使用指定的错误消息和对导致//的内部异常的引用来初始化类的新实例////这个例外。///publicCustomException(stringmessage,Exceptioninner):base(message,inner){}//////使用序列化数据初始化类的新实例。///protectedCustomException(SerializationInfoinfo,StreamingContextcontext):base(info,context){}}UPDATE此外,如果您在IIS中托管服务器代码,则需要在web.config中使用以下内容以允许异常传播到客户端End:......这个错误有不同的原因,不仅仅是你们提到的几个。我注意到这个错误的另一个原因;那是对远程对象的构造函数的远程调用抛出异常的时候。异常未序列化,因为此时对象本身未初始化。我相信您应该避免任何可能导致将自定义异常抛出到远程对象的构造函数中的代码。如果在构造函数内的代码执行期间抛出系统异常,则应将其作为系统错误(未知)处理,并使用文件系统或其他方式内置存储该异常详细信息的机制。.net远程处理这些天听起来真的很吸引人,但是您的项目越大,您在代码中引入的概念越多,这项技术暴露的弱点就越多。这是一项很棒的技术,但您需要大量经验才能开发出可靠的解决方案。以上就是C#学习教程:.NETRemotingException还没有处理客户端共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: