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