Как проще всего делить память между службой Windows и приложением? - PullRequest
5 голосов
/ 18 октября 2011

Мне нужен мой Сервис для обновления полей в общей памяти, чтобы клиентское приложение могло их читать и отображать.Я обнаружил, что мое текущее решение неэффективно из-за изоляции сеанса 0 .

Я переименовал mutex es в глобальном пространстве имен, которое исправляет этот элемент, но неПохоже, что DLL будет доступен для совместного использования между сеансами, несмотря на одно решение для изоляции сеанса 0:

"Явно выберите либо локальное \, либо глобальное \ пространство имен для любых именованных объектов, таких как события илиотображенная память, которую служба делает доступной. "

Я не знаю, какая часть библиотеки DLL может быть классифицирована как именованный объект, и потребуется слишком много времени, чтобы ее переустановить и пройти через неепроверить.

Я увидел тома кода для именованных каналов и был отложен.Я не хочу создавать файл, который касается диска, так как я считаю, что это требуется для решения memoryMappedFile.Можно ли заставить работать общие разделы DLL?В противном случае, что проще?

public ref class ServerGUIBridge
{
public:
#pragma data_seg(".sdata")
    static int commonIntShouldBeGlobal = 0;
    static bool hasBeenInitializedMakeMeGlobal = false;
#pragma data_seg()
#pragma comment(linker, "/section:.sdata,rws")

Я использую .NET 2.0, поэтому не WCF, пожалуйста.

Ответы [ 3 ]

1 голос
/ 18 октября 2011

Я бы предложил именованные каналы: тогда у вас будет надлежащая контролируемая изоляция между двумя процессами.Совместное использование DLL звучит так, как будто это чревато опасностью.

Именованные каналы задокументированы в MSDN здесь: http://msdn.microsoft.com/en-us/library/aa365590.aspx

, а полезная статья по .NET 2.0 находится здесь: http://www.switchonthecode.com/tutorials/interprocess-communication-using-named-pipes-in-csharp

(Имейте в виду, что в .NET 3.5 и выше есть класс NetNamedPipeBinding [http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx], который является частью WCF)

0 голосов
/ 18 октября 2011

Все версии .NET Framework имеют функцию удаленного взаимодействия.Это позволяет вызывать методы в другом домене приложения, который может находиться в отдельных процессах.См. MSDN для образцов и использования: http://msdn.microsoft.com/en-us/library/kwdt6w2k(v=VS.80).aspx

0 голосов
/ 18 октября 2011

Один из часто пропускаемых методов IPC - запись в реестр.Для двух членов POD, которые я предлагаю поделиться, это было бы идеальным решением. IPC, MSDN и реестр

...