Исключение SEHException при загрузке приложения в процессе сервера C#

У меня есть клиент.NET, который имеет несколько файлов библиотеки C#, один из файлов библиотеки C# загружает стороннюю собственную библиотеку. Теперь по некоторым причинам мы хотели бы преобразовать библиотеку C# в новый серверный процесс C#, который, в свою очередь, будет размещать стороннюю собственную библиотеку и использовать ее. Я использовал.NET Remoting Framework(HttpServerChannel) для достижения этой цели. Чтобы иметь возможность использовать API-интерфейсы нативной библиотеки, мне сначала нужно загрузить некоторые из ее внутренних модулей и приложений. При загрузке приложений я получаю исключение SEH. Примечание. Это прекрасно работает с существующей архитектурой, в которой библиотека C# выполняет эту работу вместо процесса C#. Вызов выглядит примерно так (API используется в Teigha Service) SystemObjects.DynamicLinker.LoadApp("GripPoints", true, true)

Заранее извиняюсь, если я что-то пропустил, поскольку я новичок в.NET REMOTING Framework.

Запись обновлена ​​с использованием приведенного ниже кода. Библиотека C#, которая загружает собственную библиотеку, использовалась для создания нового процесса сервера. Код сервера приведен ниже. Библиотека C# ссылается на "MyClassInternal"

`using MyClassInternal;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Runtime.Remoting;
 using System.Runtime.Remoting.Channels;
 using System.Runtime.Remoting.Channels.Http;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;

namespace DWGServerHost
{
   class DWGServerHostMain
   {
       public static int serverPort = 9876;
       static void Main(string[] args)
       {
           HttpServerChannel http = null;
           if (args.Length > 0 && !int.TryParse(args[0], out serverPort))
           {
               serverPort = 9876;
           }

           http = new HttpServerChannel(serverPort);
           ChannelServices.RegisterChannel(http, false);
           RemotingConfiguration.RegisterWellKnownServiceType(
           typeof(MyClass),
           "MyClassService",
           WellKnownObjectMode.SingleCall);
           Thread.CurrentThread.Join();
       }
   }

} `

На стороне клиента эта служба запускается, а затем используется, как показано ниже:

                Process proc = new Process();
                proc.StartInfo.FileName = Path.Combine("Path to Exe", "DWGServerHost.exe");
                proc.StartInfo.Arguments = "9876";
                proc.StartInfo.CreateNoWindow = false;
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.WorkingDirectory = "Path to Server Location";
                proc.Start();
                //SetErrorMode(0);
                if (proc.HasExited)
                {
                    Console.WriteLine("Could not start server");
                    return -1;
                }

                HttpClientChannel http = null;
                http = new HttpClientChannel();
                ChannelServices.RegisterChannel(http, false);

                assembly = Assembly.LoadFrom("Path to DLL");
                Object obj = Activator.GetObject(typeof(MyClass), "http://localhost:9876/MyClassService");
                MyClass myClass = (MyClass)obj;

Библиотека "MyClassInternal", в свою очередь, загружает стороннюю библиотеку и создает сервис. Для использования сторонних библиотечных API необходимо выполнить некоторую инициализацию, например, загрузить внутренние библиотеки и модули сторонней библиотеки. Используемый API - SystemObjects.DynamicLinker.LoadApp("GripPoints", true, true)

Приведенный выше API прекрасно работает, если мы напрямую загружаем библиотеку C# из нашего клиента библиотеки C#, и он не работает, когда процесс C# Server размещает библиотеку C#.

Примечание. Класс в "MyClassInternal" уже наследуется от MarshalByRefObject. Так что никаких проблем в классе.

1 ответ

Извините, ребята, мой обновленный хост-процесс не был помещен в нужное место после внесения некоторых изменений. Мы можем закрыть этот вопрос.

Другие вопросы по тегам