Проверих останалите въпроси за отдалечено управление и този конкретен случай изглежда не е разгледан.
Имам настроен .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
}