2012-01-03 5 views
3

.NET의 웹 서비스 호출에 쿠키를 설정하는 데 문제가 있습니다. 제공된 wsdl 호출을 사용하기 전에 클라이언트 웹 사이트에 로그인 할 때 얻은 쿠키를 제공해야합니다. 로그인하고 쿠키를 검색하는 메소드가 있는데, 여기서 쿠키를 내 makeSearch 메소드로 전달합니다 (아래 참조). 보시다시피 wsdl 객체의 cookieContainer에 쿠키를 설정하고 있습니다. 그러나, 내가 내 AdvancedSearch 메서드에 의해 만들어진 요청을 확인할 때, 나는 어떤 쿠키도 전송되지 않는다는 것을 피 들러에서인지하고있다. 클라이언트가 Java에서 솔루션을 제공했지만 문제를 .NET으로 전송하는 데 문제가 있습니다..NET에서 웹 서비스 호출을 통해 쿠키 보내기

는 다음 Java 코드의 솔루션입니다 :

public AdvancedSearchResult makeSearch(String cookie){ 
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 
AdvancedSearchResult searchResults = new AdvancedSearchResult(); 
Cookie cook= new Cookie("NAME", HttpUtility.UrlEncode(cookie)); 
searches.CookieContainer = new CookieContainer(); 
searches.CookieContainer.Add(newUri(www.test.com),cook); 
searchResults = searches.AdvancedSearch("search params"); 
return searchResults; 

}

수있는 사람 목록 :

private static void setupClient(Object port, final String cookie) throws Exception { 
    Client client = ClientProxy.getClient(port); 
    HTTPConduit http = (HTTPConduit) client.getConduit(); 
    HTTPClientPolicy policy = http.getClient(); 
    if (policy == null) { 
     policy = new HTTPClientPolicy(); 
     http.setClient(policy); 
    } 
    policy.setCookie(cookie); 
    policy.setAutoRedirect(true); 
} 

내 코드는 다음입니다 (포트는 전달 된 WSDL 객체입니다) 어떤 아이디어 또는 해결책? 여기

+0

그것은 보이지 않는 (서버 측에 CAS 보안 수요가) 보안 예외를 얻을 것이다 쿠키를 올바르게 설정하십시오. 쿠키 문자열 값은 쿠키 자체의 내용입니까, 아니면 NAME 매개 변수입니까? – Alan

+0

쿠키 문자열 값의 내용입니다. makeSearch() 메소드로 전달되는 쿠키 문자열 값은 다른 메소드에 의해 검색되고있다. 다른 방법이 있습니까? –

답변

4

난 그냥이 같은 문제를했고 내가

var tmWebServices    = new TM_WebServices(); 
tmWebServices.CookieContainer = new System.Net.CookieContainer(); 
tmWebServices.Url    = Test_TM.tmWebServices; 

var username  = "reader"; 
var passwordHash = Test_TM.passwordHash_Reader; 
var sessionID = tmWebServices.Login(username, passwordHash); 

//Note that this is optional if you set these cookies from the server side 
var cookie  = new System.Net.Cookie("Session",sessionID.str()); 
tmWebServices.CookieContainer.Add(tmWebServices.Url.uri() , cookie); 

var guidanceItemID = "0c85a318-0c32-4417-9d72-7475bb96517e".guid(); 

var guidanceItemHtml = tmWebServices.GetGuidanceItemHtml(guidanceItemID); 

return "{0}".format(guidanceItemHtml); 


//using O2.SecurityInnovation.TeamMentor 
//O2File:TM_WebServices.cs 
//O2File:Test_TM_Config.cs 
//O2Ref:System.Web.Services.dll 

의 핵심은 서버에서 전송되는 쿠키를 만든

tmWebServices.CookieContainer = new System.Net.CookieContainer(); 

더 요청을 재전송하기 위해 추가되었다 그것을 해결하는 방법입니다 . 위의 예에서

, 유효한 세션 쿠키 값없이 GetGuidanceItemHtml를 호출하는 경우 당신은 당신이있는 것처럼

관련 문제