首页 > 解决方案 > 如何在.Net Core 3.1中创建的WCF服务中读取/解析soap标头请求

问题描述

我创建了一个 poc WCF 服务,并且可以使用 SOAP UI 或 Postman 调用该服务。但是对于一些项目工作,我需要解析下面的肥皂安全标头

SOAP 标头

<soapenv:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsse:UsernameToken wsu:Id="UsernameToken-5351BA8068B753C930158868612679914"><wsse:Username>test user</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">CS++k5OEqKsJByVPPmUqcBkAeoQ=</wsse:Password><wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">VK+Ilb/zy80lFbfHAAQupg==</wsse:Nonce><wsu:Created>2020-05-05T13:42:06.798Z</wsu:Created></wsse:UsernameToken></wsse:Security></soapenv:Header>

startup.cs 文件如下所示

public class Startup
    {
            public void ConfigureServices(IServiceCollection services)
             {

             services.AddScoped<ITestService, TestService>();          
             services.AddSoapServiceOperationTuner(new ServiceOperationTuner());
            }
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {

            var binding = new BasicHttpBinding();
            binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Digest;
            app.UseSoapEndpoint<ITestService>("/Service.svc", binding, SoapSerializer.DataContractSerializer);
        }
}

ServiceOperationTuner.cs 类具有获取 HttpContext 对象的代码,如下所示。对于向 WCF 服务发出的任何请求,将在此处调用 Tune 方法

public void Tune(HttpContext httpContext, object serviceInstance, OperationDescription operation)
        {
}

httpContext 对象包含所有标头详细信息,但不包含 soapenv:Header。

谁能帮我在 .Net 核心中解析这个 soapenv:Header 请求?提前致谢

标签: c#wcfasp.net-core

解决方案


推荐阅读