Use wsse security header in soap message (Visual Studio 2015, .Net Framework 4.5)

后端 未结 2 1414
盖世英雄少女心
盖世英雄少女心 2021-01-14 11:51

I would like to consume a Soap Service provided by DHL. You can find the wsdl here: https://wsbexpress.dhl.com/sndpt/expressRateBook?WSDL

Therefore I created a new C

2条回答
  •  没有蜡笔的小新
    2021-01-14 12:03

    You can configure you Service Reference to add the Security Header as AW Rowse describes at http://cxdeveloper.com/article/implementing-ws-security-digest-password-nonce-net-40-wcf:

     private void Configure()
        {
            System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return true; };
    
            defaultBinding = new BasicHttpBinding
            {
                Security =
                {
                    Mode = BasicHttpSecurityMode.Transport,
                    Transport =
                    {
                        ClientCredentialType = HttpClientCredentialType.Digest
                    }
                }
            };
    
            defaultToken = new UsernameToken(UserName, Password, PasswordOption.SendHashed);
    
            defaultSecurityHeader = MessageHeader.CreateHeader(
              "Security",
              "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
              defaultToken.GetXml(new XmlDocument())
            );
        }
    

    And create you client/proxy like this:

    public consulta_informacao_respttClient CriaConsultaClinicaClient()
        {
            var client = new consulta_informacao_respttClient(defaultBinding, new EndpointAddress("https://resqa.homologacao.unimed.coop.br/chs-integration-external-services-ptu-clinical/proxy-services/execute-query/execute-query-proxy-service"));
            client.ClientCredentials.UserName.UserName = UserName;
            client.ClientCredentials.UserName.Password = Password;
    
            var scope = new OperationContextScope(client.InnerChannel);
    
            OperationContext.Current.OutgoingMessageHeaders.Add(defaultSecurityHeader);
            return client;
        }
    

    The properties you will need to create in your class are:

    private BasicHttpBinding defaultBinding;
    private UsernameToken defaultToken;
    private MessageHeader defaultSecurityHeader;
    

    You won't need to configure anything in app/web.config.

提交回复
热议问题