Я хочу получить доступ к секционированным приложениям COM + на удаленном сервере. Я пробовал это:
using COMAdmin
using System.Runtime.InteropServices;
_serverName = myRemoteServer;
_partionName = myPartionName;
_message = myMessage;
ICOMAdminCatalog2 catalog = new COMAdminCatalog();
catalog.Connect(_serverName);
string moniker = string.Empty;
string MsgInClassId = "E3BD1489-30DD-4380-856A-12B959502BFD";
//we are using partitions
if (!string.IsNullOrEmpty(_partitionName))
{
COMAdminCatalogCollection partitions = catalog.GetCollection("Partitions");
partitions.Populate();
string partitionId = string.Empty;
foreach (ICatalogObject item in partitions)
{
if (item.Name == _partitionName)
{
partitionId = item.Key;
break;
}
}
if (!string.IsNullOrEmpty(partitionId) )
{
moniker = $"partition:{partitionId}/new:{new Guid(MsgInClassId)}";
try
{
var M = (IMsgInManager)Marshal.BindToMoniker(moniker);
M.AddMsg(_message);
}
catch (Exception ex)
{
throw new Exception($"We can not use: {_partitionName} with Id {partitionId}. {ex.ToString()}");
}
}
else
{
throw;
}
}
else
//we don't have partitions and this will work
{
Type T = Type.GetTypeFromCLSID(new Guid(MsgInClassId), _serverName, true);
var M = (IMsgInManager)Activator.CreateInstance(T);
M.AddMsg(_message);
}
}
Итак, когда мы локальны на (удаленной) машине, разделы работают с именем и маршалом .BindToMoniker. Но когда я пытаюсь сделать то же самое дистанционно с моей машины, я получаю сообщение об ошибке Marshal.BindToMoniker, что Partitons не включен. Потому что на моих машинных разделах не включен.
Message = "COM+ partitions are currently disabled. (Exception from HRESULT: 0x80110824)"
Как я могу использовать Marshal.BindToMoniker для запуска на удаленном сервере. Это что-то, что я могу добавить в строку прозвища i.e.
moniker = $"server:_server/partition:{partitionId}/new:{new Guid(MsgInClassId)}"
Мои вопросы очень симпатичны: COM + активация объекта в другом разделе