У меня есть клиент-серверное приложение, которое использует .NET Remoting для связи.Это разделено интерфейсом, и клиент не ссылается на реализацию сервера.Теперь пользовательское исключение в совместно используемой dll, когда выбрасывается с сервера, не перехватывается клиентом и вызывает исключение TargetInvocationException, говорящее «Не удалось загрузить файл или сборку [Server Assembly]».Проблема решается, если я копирую серверную сборку на клиент.Немного странно, что это происходит, учитывая, что сборка сервера даже не содержит тип исключения, и я не хочу копировать сборку реализации сервера на клиент.
В двух словах:
ClientAssembly -> CommonAssembly, InterfaceAssembly
ServerAssembly -> CommonAssembly, InterfaceAssembly
(в общей сборке)
class MyException : Exception, ISerializable (this is implemented properly)
{ }
(в сборке сервера)
class MyServer
{
public void MyFunc()
{
throw new MyException("custom message");
}
}
(в сборке клиента)
class MyClient
{
public void MyFunc()
{
try { serverObject.MyFunc() } catch(MyException e) { // doesn't get caught. }
}
}
Это будетбыть действительно полезным, если есть обходной путь для этого.Кроме того, если кто-то может пролить свет на то, почему требуется сборка, даже если тип был предоставлен в общий доступ.Как ни странно, эта проблема не возникает, если я использую System.Exception