无法理解SoapAction标头-使用asmx web服务-使用自定义绑定-dot net core 3.1 c#应用程



我需要使用https-asmx服务,通过basicHttpBinding和自定义绑定公开方法。当我使用basicHttpBinding时,我能够得到响应。然而,对于自定义绑定,我得到了以下错误。

无法理解SoapAction标头

我使用svcutil.exe生成了服务代理,并在startup.cs文件中注入了依赖项,如下所示。svcutil.exe 在代理文件中绑定

<customBinding>
<binding name="MyServicesSoap12">
<textMessageEncoding messageVersion="Soap12" />
<httpsTransport />
</binding>
</customBinding>

startup.cs 中的代码

.ConfigureServices((ctxt, service) =>
{
services.AddScoped<IMyServicesSoap12>(provider => {
//var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
var binding = new CustomBinding();
var msgVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12);
binding.Elements.Add(new TextMessageEncodingBindingElement(msgVersion, System.Text.Encoding.Default));
binding.Elements.Add(new HttpsTransportBindingElement() { AllowCookies = true, MaxBufferSize = int.MaxValue, MaxReceivedMessageSize = int.MaxValue });
var endPoint = new EndpointAddress("https://someservice.asmx");
var channelFactory = new ChannelFactory<IMyServicesSoap12>(binding, endPoint);
var client = channelFactory.CreateChannel();
return client;
});

}

然后,我在myLogic类中进行了IMyServicesSoap12的构造函数注入。

这是我的消费者代码。

var Response = await _myService.MethodAsync(requestVariable);

花了将近4-5个小时来寻找答案。我最初没有按照中的建议使用"添加连接的服务"选项https://joshuachini.com/2017/07/13/calling-a-soap-service-from-asp-net-core-or-net-core/

最后,我看到了当您使用AddConnectedService选项时自动生成的代码。我只缺了一件小东西。这不是总是归结为一个小小的错误吗!

设置消息版本时,我缺少AddressingVersion的可选参数。

上一篇-

var msgVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12);

更改-

var msgVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12,AddressingVersion.None);

这为我解决了这个问题。我想在这里为其他开发者分享并节省一些时间。

相关内容

  • 没有找到相关文章

最新更新