Я проверил остальные вопросы по удаленному взаимодействию, и этот конкретный случай, похоже, не рассматривался.
У меня настроен сервер / клиент .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 не было обработано. Это происходит на стороне сервера. Исключение никогда не передается на сторону клиента, и я не могу понять, почему. Все вопросы, которые я рассмотрел, касаются проблемы обработки исключения на стороне клиента, но это не пользовательское исключение, а базовый тип. В моем случае я даже не могу получить никакого исключения, чтобы пересечь границу удаленного взаимодействия с клиентом. Вот копия 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
}