Проектное решение для вызова и взаимодействия с 64-битным приложением из 32-битного C# сервиса - PullRequest
0 голосов
/ 23 марта 2020

Я разрабатываю службу GRP C с использованием C# и развертываю ее как службу Windows. Эта служба GRP C является 32-разрядной, поскольку она должна использовать другие существующие общие компоненты, которые являются 32-разрядными.

Служба GRP C должна выполнять алгоритм, записанный в MATLAB. Это взаимодействие осуществляется путем использования 64-битных DLL, сгенерированных в MATLAB. Но так как новая служба GRP C является 32-битной, я не могу использовать 64-битную DLL, созданную в Matlab.

Чтобы решить эту проблему, я создал 64-битное консольное приложение и использую 64-битную MATLAB dll в консольном приложении, оно работает.

Теперь я вызываю 64-битное консольное приложение как процесс в сервисе GRP C и могу запустить алгоритм MATLAB. Это также работает.

В настоящее время служба GRP C генерирует данные Excel в качестве входных данных, и консольное приложение отправляет путь Excel в алгоритм MATLAB. А консольное приложение получает выходные данные из алгоритма MATLAB и генерирует данные Excel. Затем GRP C Service анализирует эти данные Excel и получает выходные данные.

Так что я думаю об исключении Excel как средства транзакции и ищу способы прямой связи с 64-битным приложением (в настоящее время это консольное приложение). Один из вариантов - использовать 64-битное приложение в качестве службы (WCF / GRP C), иметь метод и вызывать его из 32-битной службы. Поскольку служба GRP C только запускает выполнение этого 64-битного процесса, мне потребовались предложения, чтобы принять решение о том, может ли 64-битное приложение быть сервисом или доступны какие-либо другие опции?

...