2016-12-28 3 views
-1

에 전화를 걸 때 아래 코드를 사용하여 SOAP을 호출하는 동안 응답으로 "Unauthorized"가 표시됩니다."Unauthorized"- SOAP API C#

NetworkCredential credentials = new NetworkCredential("username", "password"); 
var request = (HttpWebRequest)WebRequest.Create(url); 
request.Credentials = credentials; 

    try 
    { 
     WebResponse response = request.GetResponse(); 
     using(Stream responseStream = response.GetResponseStream()) 
     { 
      StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
      return reader.ReadToEnd(); 
     } 
    } 
    catch(WebException Ex) 
    { 
     WebResponse errorResponse = Ex.Response; 
     using(Stream responseStream = errorResponse.GetResponseStream()) 
     { 
      StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); 
      string errorText = reader.ReadToEnd(); 
     } 
     throw; 
    } 

내가 잘못한 곳에서 나를 교정 해 줄 수 있습니까?

오류가 발생합니다. - "원격 서버가 오류를 반환했습니다 : (401) 권한이 없습니다."

+0

@codran 사용 방법을 안내해 주시겠습니까? – HarshSharma

+0

당신은 서비스가 n/w 인증을 가지고 있는지, 그것은 정상적인 헤더도 request.Headers.Add ("사용자 이름", "XXXX")와 같은 수 있습니다 request.Headers.Add ("PAssword", "yyyy") – abhi

+0

@ abhi - 나는 또한 그것을 시도했지만 그것도 작동하지 않습니다. – HarshSharma

답변

0

이이 오류가 아닙니다

   HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest; 
      string authInfo = "username" + ":" + "Password"; 
      authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo)); 

      request.Headers[HttpRequestHeader.Authorization] = "Basic " + authInfo; 
      HttpWebResponse response = request.GetResponse() as HttpWebResponse; 

      using (var responseStream = response.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
     return reader.ReadToEnd(); 
      } 
+0

기본 인증을 사용하여 헤더에 자격 증명을 전달하면 정상적으로 작동합니다. –

+0

미안하지만 여전히 동일한 오류가 발생합니다. 원격 서버에서 오류를 반환했습니다. (401) Unauthorized. – HarshSharma

+1

올바른 자격 증명을 사용하고 있습니까? 현재 내 서비스 중 하나에 대해 동일한 코드를 실행하고 있기 때문에 제대로 실행됩니다. –

0

작동합니다. 신임장에 대한 경고입니다. 엔드 포인트에 대한 응답을 얻으려면 법적 사용자 자격 증명을 보내야합니다. 이것을 체크 아웃하십시오;

NetworkCredential credentials = new NetworkCredential{ 
Username=//fill your username, 
Password=//fill your password but be carefull, is it hashed or not? 
}; 
var request = (HttpWebRequest)WebRequest.Create(url); 
request.Credentials = credentials; 

    try 
    { 
     WebResponse response = request.GetResponse(); 
     using(Stream responseStream = response.GetResponseStream()) 
     { 
      StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
      return reader.ReadToEnd(); 
     } 
    } 
    catch(WebException Ex) 
    { 
     WebResponse errorResponse = Ex.Response; 
     using(Stream responseStream = errorResponse.GetResponseStream()) 
     { 
      StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); 
      string errorText = reader.ReadToEnd(); 
     } 
     throw; 
    }