Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
非托管C和x2B之间的IPC+;并使用WCF和WWSAPI管理C#应用程序_C#_Wcf_Visual C++_Ipc_Wwsapi - Fatal编程技术网

非托管C和x2B之间的IPC+;并使用WCF和WWSAPI管理C#应用程序

非托管C和x2B之间的IPC+;并使用WCF和WWSAPI管理C#应用程序,c#,wcf,visual-c++,ipc,wwsapi,C#,Wcf,Visual C++,Ipc,Wwsapi,我想在非托管VC++COM Excel加载项和托管C#控制台应用程序之间实现IPC。目前,我使用NetNamedPipeBinding在maanged C#应用程序之间实现IPC。我现在想使用NetNamedPipeBinding在非托管和托管应用程序之间实现IPC 我尝试使用WWSAPIs,并在上遵循示例以实现相同的效果。正如MSDN参考中提到的,NetNamedPipeBinding可用于WWSAPI,并随Windows 8 SDK一起提供 下面是我的C#控制台应用程序的代码示例 Uri b

我想在非托管VC++COM Excel加载项和托管C#控制台应用程序之间实现IPC。目前,我使用NetNamedPipeBinding在maanged C#应用程序之间实现IPC。我现在想使用NetNamedPipeBinding在非托管和托管应用程序之间实现IPC

我尝试使用WWSAPIs,并在上遵循示例以实现相同的效果。正如MSDN参考中提到的,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创建所需的头文件。但是,当我尝试创建头文件时,会收到以下警告:

警告WSUTIL0089在中未找到支持的策略设置 输入元数据。服务可能正在使用绑定配置,而不是 WWSAPI支持,如消息安全设置。看见 WWSAPI支持的配置列表的文档

现在,如果我将C#控制台应用程序中的绑定类型更改为WSHttpBinding或NetTcpBinding,那么我就能够使用WsUtil成功地创建头文件

我无法使用WsHttpBinding,因为启动服务需要管理权限,并且我的托管应用程序通常会使用非管理权限运行。我还在MSDN上读到,网络命名管道绑定针对同一台机器上的IPC进行了优化,这在理想情况下就是我的情况

如果需要,我可以共享我的unangangeC++和管理C的示例代码。 <>对非托管C++与托管C语言之间的NETAMEDIN绑定的任何帮助都将被理解为


注意:我无法将我的非托管VC++COM加载项移植到托管VSTO应用程序中

您可以编辑主WSDL文件并更改
soap12:binding transport=”吗http://schemas.microsoft.com/soap/named-pipe“/>
行。只需将
命名管道
替换为
tcp
。Wsutil现在应该可以工作了,但是您可以使用当时生成的内容吗?
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();