Exceção do .NET Remoting não tratada no lado do cliente
Eu verifiquei o resto das questões de remoting, e este caso específico não parece ser abordado.
Eu tenho um servidor / cliente do .NET Remoting configurado. No lado do servidor eu tenho um objeto com um método que pode lançar uma exceção e um cliente que tentará chamar esse método.
Servidor:
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);
}
}
Cliente:
try
{
bool result = RemotedObject.MyEquals(myGuid, "cat", "dog");
}
catch (Services.Exceptions.AuthenticationException e)
{
Console.WriteLine("You do not have permission to execute that action");
}
Quando eu chamo MyEquals com um Guid que faz com que CheckAuthentication retorne false, o .NET tenta lançar a exceção e diz que o AuthenticationException não foi manipulado. Isso acontece do lado do servidor. A exceção nunca é empacotada para o lado do cliente e não consigo descobrir o motivo. Todas as questões que analisei abordam o problema de uma exceção sendo tratada no lado do cliente, mas não é a exceção personalizada, mas um tipo de base. No meu caso, não consigo nem obter nenhuma exceção para cruzar o limite remoto para o cliente. Aqui está uma cópia do AuthenticationException. Está na biblioteca compartilhada entre o servidor e o cliente.
[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
}