为什么.net核心不支持TransportWithMessageCredential?

时间:2018-12-19 13:45:22

标签: c# wcf soap .net-core client-certificates

我正在尝试在.net核心中使用SOAP服务

我要将安全模式下的基本httpbinding设置为TransportWithMessageCredential

和clientcredentialType作为证书

但我遇到错误

  

在此上下文中,绑定安全属性“ securityMode”不支持值“ TransportWithMessageCredential”。

代码看起来像这样

var client = new SoapCustomClient();

var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
client.ClientCredentials.ClientCertificate.Certificate = certCollection[0];

我在这里犯一些严重的错误吗? 有相同的解决方案吗?

[我能够在.net框架中实现此目标,但不能在.net核心中实现

2 个答案:

答案 0 :(得分:1)

在较新版本的System.ServiceModel。*程序包中解决了此问题(4.7.0为我工作)。

请参见https://github.com/dotnet/wcf/issues/4045#issuecomment-577854822

答案 1 :(得分:0)

添加服务引用后只需编辑.csproj文件,并将这些依赖项从4.4。*指向4.6。*

<ItemGroup> <PackageReference Include="System.ServiceModel.Duplex" Version="4.6.*" /> 
    <PackageReference Include="System.ServiceModel.Http" Version="4.6.*" /> 
    <PackageReference Include="System.ServiceModel.NetTcp" Version="4.6.*" /> 
    <PackageReference Include="System.ServiceModel.Security" Version="4.6.*" /> 
</ItemGroup>

并添加此

        binding.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.TransportWithMessageCredential;
        binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;