猿问

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

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


LEATH
浏览 118回答 2
2回答

炎炎设计

只需在添加服务引用后编辑 .csproj 文件并将这些依赖项从 4.4.* 指向 4.6.*<ItemGroup> <PackageReference Include="System.ServiceModel.Duplex" Version="4.6.*" />&nbsp;&nbsp; &nbsp; <PackageReference Include="System.ServiceModel.Http" Version="4.6.*" />&nbsp;&nbsp; &nbsp; <PackageReference Include="System.ServiceModel.NetTcp" Version="4.6.*" />&nbsp;&nbsp; &nbsp; <PackageReference Include="System.ServiceModel.Security" Version="4.6.*" />&nbsp;</ItemGroup>并添加这个&nbsp; &nbsp; &nbsp; &nbsp; binding.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.TransportWithMessageCredential;&nbsp; &nbsp; &nbsp; &nbsp; binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

慕码人8056858

这个问题在较新版本的 System.ServiceModel.* 包中得到解决(4.7.0 对我有用)。见https://github.com/dotnet/wcf/issues/4045#issuecomment-577854822
随时随地看视频慕课网APP
我要回答