Я хочу получить доступ к разделенным приложениям 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);
}
}
Поэтому, когда мы локально на (удаленной) машине, разделы работают с моникером и Marshal.BindToMoniker. Но когда я пытаюсь сделать то же самое удаленно со своей машины, я получаю сообщение об ошибке от Marshal.BindToMoniker, что разделы не включены. Потому что на моей машине разделы не включены.
Message = "COM+ partitions are currently disabled. (Exception from HRESULT: 0x80110824)"
Как я могу использовать Marshal.BindToMoniker для запуска на удаленном сервере. Могу ли я добавить что-то к строке моникера, т.е.
moniker = $"server:_server/partition:{partitionId}/new:{new Guid(MsgInClassId)}"
Мои вопросы очень похожи на это: активация объекта COM+ в другом разделе
COM's new class moniker does not currently honor the pServerInfo flag.
здесь. Если вы добавите это в качестве ответа, у вас будет мой голос, и если не появится ничего лучше, вы также получите награду. - person Mikael Eriksson   schedule 20.02.2017