Исключение .NET Remoting не обрабатывается на стороне клиента
Я проверил остальные вопросы удаленного взаимодействия, и этот конкретный случай, похоже, не был рассмотрен.
У меня настроен сервер / клиент .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");
}
Когда я вызываю MyEquals с Guid, который заставляет CheckAuthentication возвращать false, .NET пытается вызвать исключение и говорит, что AuthenticationException не обработано. Это происходит на стороне сервера. Исключение никогда не передается клиенту, и я не могу понять, почему. Все вопросы, на которые я смотрел, касаются проблемы обработки исключений на стороне клиента, но это не так.Пользовательское исключение, но базовый тип. В моем случае я могуt даже получить любое исключение, чтобы пересечь границу удаленного взаимодействия с клиентом. Вот копия 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
}