在 .NetStandard 或 .NET core 中的 WSHttpBinding

8

我希望在我的应用程序中集成NMVS协议,该应用程序为测试提供wsdl文件,其中还包含使用.net框架库编写的示例代码。

我想在.netstandard、.netcore或UWP应用程序中对其进行测试,但wsdl文件仅支持“WSHttpBinding”,而这在.netstandard、.net core和UWP中不受支持。

 <wsdl:binding name="WSHttpBinding_ISinglePackServices" type="ns:ISinglePackServices">



WSHttpBinding binding = new WSHttpBinding();
 binding.Security.Mode =  SecurityMode.Transport;
 binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

我使用了basichttpbinding,但我遇到了错误,错误信息是"The content type application/soap+xml; charset=UTF-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8)."。
有哪些其他的故障排除方法?
谢谢 Imrankhan

WSDL是SOAP标准。WS绑定意味着它支持WS-*互操作性标准。这就是WCF使用的内容。如果您使用“添加服务引用”或“添加连接的服务”,Visual Studio将创建一个WCF代理,负责处理所有这些内容。为什么要手动编写绑定? - Panagiotis Kanavos
您正在尝试针对哪个.NET Standard版本进行目标化?旧的.NET Core/Standard版本不支持WCF所需的所有类型。最新版本支持所有类型。这意味着,即使“添加连接服务”无法正常工作,您也可以在完整框架项目中生成代理,将文件复制到标准2.0项目中,编译并使用它。 - Panagiotis Kanavos
NMVS提供了一些.wsdl文件,我已经使用Add connected service添加了这些文件。现在,为了调用一些方法,我需要设置安全模式和客户端凭据类型,您可以在上面的wshttpbinding代码中看到。那个XML部分来自wsdl文件。 - Imrankhan
1个回答

15

这是针对你问题的解决方案:

var transportSecurityBinding = new BasicHttpBinding();
transportSecurityBinding.Security.Mode = BasicHttpSecurityMode.Transport;
transportSecurityBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

var customTransportSecurityBinding = new CustomBinding(transportSecurityBinding);

var textBindingElement = new TextMessageEncodingBindingElement
{
      MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None)
};

// Replace text element to have Soap12 message version
customTransportSecurityBinding.Elements[0] = textBindingElement;

谢谢,它为我节省了大量的时间。由于我的URL不是https,所以通过设置BasicHttpSecurityMode.NoneHttpClientCredentialType.None对我很有用。 - Moshi
Giannone先生,您真是个天才。如果像我一样,您有一些旧的和新的SOAP服务,并且想要重新生成代理代码并使用通道工厂来访问(您知道的,21世纪的技术),那么传输和标头之间的差异可能会让人感到困惑。这个答案应该在许多SO帖子中得到提升。 - Charlesdwm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接