IPC между неуправляемым C++ и управляемым приложением C# с использованием WCF и WWSAPI

Я хочу добиться IPC между неуправляемым надстройкой VC++ COM Excel и управляемым консольным приложением C#. В настоящее время я достигаю IPC между maanged приложениями C#, используя NetNamedPipeBinding. Теперь я хочу добиться IPC между неуправляемыми и управляемыми приложениями, использующими NetNamedPipeBinding.

Я попытался использовать WWSAPI и следовал примеру в CodeProject, чтобы добиться того же. Как упомянуто в ссылочной ссылке MSDN link1, linkN и Link3 NetNamedPipeBinding доступны для WWSAPI и поставляются с Windows 8 SDK.

Ниже приведен пример кода моего консольного приложения C#

Uri baseAddress = new Uri("net.pipe://localhost/Server");
serverHost = new ServiceHost(this, baseAddress);

NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
binding.Security.Mode = NetNamedPipeSecurityMode.None;

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy12;
serverHost.Description.Behaviors.Add(smb);

serverHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexNamedPipeBinding(), "mex");
serverHost.AddServiceEndpoint((typeof(IAdd)), binding, baseAddress);

serverHost.Open();

IAdd - это интерфейс, который определяется следующим образом

[ServiceContract]
public interface IAdd
{
    [OperationContract]
    void PerformAddition(int val1, int val2);
}

Затем я запускаю службу и выполняю следующую команду для генерации файлов wsdl и xsd.

svcutil /t:metadata net.pipe://localhost/Server

После этого я использую WsUtil для создания необходимых заголовочных файлов. Однако, когда я пытаюсь создать заголовочные файлы, я получаю следующее предупреждение:

warning WSUTIL0089 Не найдено ни одного поддерживаемого параметра политики во входных метаданных. Служба может использовать конфигурацию привязки, не поддерживаемую WWSAPI, такую ​​как настройка безопасности сообщения. См. Документацию для списка конфигураций, поддерживаемых WWSAPI.

Теперь, если я изменил тип привязки в моем консольном приложении C# на WSHttpBinding или NetTcpBinding, я смогу успешно создать заголовочные файлы с помощью WsUtil.

Я не могу использовать WsHttpBinding, так как для запуска службы требуются административные привилегии, и, как правило, мое управляемое приложение будет работать без административных привилегий. Я также прочитал на MSDN, что Net Named Pipe Binding оптимизирован для IPC на той же машине, что в идеале является моим случаем.

При необходимости я могу поделиться примером кода для моего неизменного C++ и управляемого C#.

Буду признателен за любую помощь в отношении достижения NetNamedPipeBinding между неуправляемым C++ и управляемым C#

PS: я не могу портировать неуправляемое дополнение VC++ COM к управляемому приложению VSTO

0 ответов

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