【问题标题】:Why TransportWithMessageCredential is not supported in .net core?为什么 .net 核心不支持 TransportWithMessageCredential?
【发布时间】:2019-05-20 00:36:06
【问题描述】:

我正在尝试在 .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 核心中实现]

【问题讨论】:

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


【解决方案1】:

只需在添加服务引用后编辑 .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;

【讨论】:

    【解决方案2】:

    这个问题在较新版本的 System.ServiceModel.* 包中得到解决(4.7.0 对我有用)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 2018-12-31
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      相关资源
      最近更新 更多