>

다음과 같이 SOAP 요청에 헤더를 추가하려고했습니다

<soapenv:Header>
     <UsernameToken xmlns="http://test.com/webservices">username</UsernameToken>
     <PasswordText xmlns="http://test.com/webservices">password</PasswordText>
     <SessionType xmlns="http://test.com/webservices">None</SessionType>
</soapenv:Header>

SoapHeader 사용 제안을 찾았습니다  헤더 값을 포함하지만

<soapenv:Header>
    <CustomHeader>
        <UsernameToken xmlns="http://test.com/webservices">username</UsernameToken>
        <PasswordText xmlns="http://test.com/webservices">password</PasswordText>
        <SessionType xmlns="http://test.com/webservices">None</SessionType>
    </CustomHeader>
</soapenv:Header>

CustomHeader 없이 어떻게 요청을 할 수 있는지 제안 할 수 있습니까? .

  • 답변 # 1

    이것을 사용 해보세요

    private static void Main()
    {
        using (var client = new ServiceClient())
        using (var scope = new OperationContextScope(client.InnerChannel))
        {
            MessageHeader usernameTokenHeader = MessageHeader.CreateHeader("UsernameToken",
                "http://test.com/webservices", "username");
            OperationContext.Current.OutgoingMessageHeaders.Add(usernameTokenHeader);
            MessageHeader passwordTextHeader = MessageHeader.CreateHeader("PasswordText",
                "http://test.com/webservices", "password");
            OperationContext.Current.OutgoingMessageHeaders.Add(passwordTextHeader);
            MessageHeader sessionTypeHeader = MessageHeader.CreateHeader("SessionType",
                "http://test.com/webservices", "None");
            OperationContext.Current.OutgoingMessageHeaders.Add(sessionTypeHeader);
            string result = client.GetData(1);
            Console.WriteLine(result);
        }
        Console.ReadKey();
    }
    
    

    서비스 추적 뷰어는 다음을 보여줍니다

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
        <s:Header>
            <UsernameToken xmlns="http://test.com/webservices">username</UsernameToken>
            <PasswordText xmlns="http://test.com/webservices">password</PasswordText>
            <SessionType xmlns="http://test.com/webservices">None</SessionType>
            <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:13332/Service1.svc</To>
            <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService/GetData</Action>
        </s:Header>
    </s:Envelope>
    
    

    자세한 정보는 OperationContextScope를 살펴보십시오

관련 자료

  • 이전 PHP SQLite - php sqlite - 정확한 일치 횟수를 반환하지 않음
  • 다음 java - SOAP 요청에 헤더를 추가하는 방법?