gpt4 book ai didi

c# - .NET Remoting 异常未在客户端处理

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:13 26 4
gpt4 key购买 nike

我检查了其余的远程处理问题,这个具体案例似乎没有得到解决。

我有一个 .NET Remoting 服务器/客户端设置。在服务器端,我有一个对象,它有一个可以抛出异常的方法,以及一个将尝试调用该方法的客户端。

服务器:

public bool MyEquals(Guid myGuid, string a, string b)
{
if (CheckAuthentication(myGuid))
{
logger.Debug("Request for \"" + a + "\".Equals(\"" + b + "\")");
return a.Equals(b);
}
else
{
throw new AuthenticationException(UserRegistryService.USER_NOT_REGISTERED_EXCEPTION_TEXT);
}
}

客户:

try
{
bool result = RemotedObject.MyEquals(myGuid, "cat", "dog");
}
catch (Services.Exceptions.AuthenticationException e)
{
Console.WriteLine("You do not have permission to execute that action");
}

当我使用导致 CheckAuthentication 返回 false 的 Guid 调用 MyEquals 时,.NET 尝试抛出异常并表示 AuthenticationException 未处理。这发生在服务器端。永远不会将异常编码到客户端,我不明白为什么。我看过的所有问题都解决了客户端处理异常的问题,但它不是自定义异常而是基本类型。就我而言,我什至无法获得任何异常(exception)来跨越客户端的远程处理边界。这是 AuthenticationException 的副本。它在服务器和客户端之间的共享库中。

[Serializable]
public class AuthenticationException : ApplicationException, ISerializable
{

public AuthenticationException(string message)
: base(message)
{
}

public AuthenticationException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}

#region ISerializable Members

void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
}

#endregion
}

最佳答案

首先,do not inherit from ApplicationException .这个建议已经存在一段时间了,我相信 FxCop 会自动生成一条消息。

接下来,您通常应该使用 [Serializable] 属性来修饰您的自定义异常。我认为这是您的主要问题,因为我在方法调用中遇到异常,提示 AuthenticationException 未标记为可序列化。

关于c# - .NET Remoting 异常未在客户端处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1498772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com