2011-04-26 8 views
0

.NET (C#) 코드에서 Java Web Service를 호출하고 있습니다. SAOP 요청입니다. Java WebServices는 Axis 1.4를 사용하여 개발되었습니다. - 자바 웹 서비스에 NAME_VALUE 쌍웹 서비스에 추가 데이터를 전달하는 방법

private string GetUserInfo(string strEID) 
{ 
    string strEmpData = string.Empty; 
    GetEmpInfo.EmpProxyService objEmp;   

    try 
    { 
    objEmp = new GetEmpInfo.EmpProxyService(); 
    strEmpData = objEmp.searchByEID(strEID); 
    } 
    catch (WebException ex) 
    { 

    } 

    objEmp.Dispose(); 
    return strEmpData; 
} 

지금, 우리는 몇 가지 추가 정보를 전달해야하는 변경 요청이 : 다음

자바 웹 서비스 요청을 샘플 코드입니다.

어떻게 해결할 수 있습니까?

정보를 HTTP/SOAP 헤더로 전달할 수 있습니까?

메서드 시그니처를 변경하고 정보를 전달하는 추가 정보를 추가하는 것은 내가 생각하기에는 좋은 아이디어가 아닙니다.

EDIT : 기본적으로 우리는 누가 웹 서비스를 사용하고 있는지에 대한 로깅 정보를 추가하려고합니다. 자바 웹 서비스 요청이 성공적으로 처리되면 webappln/windows appln/flex 클라이언트의 요청 소스와 함께 사용 정보가 기록됩니다.

우리는 클라이언트가 식별하기 위해 고유 ID를 보내길 원합니다. 이것은 비즈니스 로직과는 아무런 관련이 없으므로 헤더에 메타 데이터 정보를 추가 할 수 있습니까?

+0

웹 서비스 서명을 제어 할 수 있습니까? 그렇지 않으면 서드 파티 서비스입니까? –

+0

@Andy 예, 우리는 코드 인 .NET과 Java를 모두 제어합니다. 그러나 그러한 많은 서비스가 있기 때문에이 추가 데이터를 처리하기 위해 Java 끝에서 AOP/Servlet_Filter를 작성할 계획입니다. – HanuAthena

답변

0

SOAP 헤더를 사용하지만 머리글에 비즈니스적인 의미가 없으므로 차라리 그 경로를 사용하지 않을 것입니다. 오히려 서명을 변경하고 요청 및 응답 오브젝트를 사용하십시오.

SearchByEIDResponse GetEmpInfo.EmpProxyService.searchByEID(SearchByEIDRequest)

이를 Ths는 변경 덜 고통 스럽다하게 거대한 매개 변수 목록을 방지 할 수 있습니다.

0

정보를 웹 서비스에 전달하는 방법은 웹 서비스가 노출하는 방법에 따라 다릅니다. 서비스로 작성된 언어는 소비자로서 귀하에게 중요하지 않습니다. Java 웹 서비스가 메소드 서명보다 일부 데이터를 검색하기 위해 이름 값 쌍을 필요로하는 경우이를 노출합니다. 짧게 매개 변수 목록을 유지하기 위해 요청 및 응답 객체를 사용하여 당신이 더 낫다 Eben indicates로 당신을 말했다

objEmp.searchByEID(strEID, strVal1, strVal2); 

. 이러한 복잡한 유형을 사용할 때는 경험치가 필요합니다. 즉, 단일 문자열 값만 전달해야하는 경우 get go에서 요청 개체를 사용하지 말고 50 개의 문자열 값을 전달해야하는 경우 요청 개체를 사용하십시오.

1

서비스 서명을 제어 할 수 있다면이 웹 서비스의 서명을 변경하거나 추가 인수를 사용하는 다른 메서드를 추가하는 것이 좋습니다. C#이나 Java와 같은 고급 언어를 사용하는 경우 웹 서비스 프레임 워크에서 SOAP 스택 전체를 추상화하는 경향이 있으며 최종적으로 직렬화되어 메소드를 만들기 위해 일반 객체 만 처리하게됩니다. 요구. 인수 객체 만 노출되면 실제 메소드 서명의 일부가 아닌 SOAP 메시지에 추가 물건을 주입하는 것은 까다로울 수 있습니다.

일반적으로 손으로 SOAP 메시지를 조작하는 방법이 있지만 가능한 경우 SOAP 메시지를 손으로 편집하면 직렬화 기반 프레임 워크를 사용할 때와 반대됩니다.즉, 서비스 메소드를 제어 할 수없고 그 그룹을 제어하는 ​​그룹이 SOAP 객체 외부에 추가 데이터를 전달해야하는 경우 손으로 SOAP 메시지를 골치 낼 수 있습니다.

서비스에 향후 교정을 추가하려면 단일 문자열이나 기본 값 대신 본격적인 개체를 전달하는 것이 좋습니다. 객체에는 웹 서비스의 서명이나 스키마를 변경하지 않고 추가 데이터를 전달할 수 있도록 HashMap 또는 Dictionary와 같은 키 - 값 데이터 저장소를 포함 할 수 있습니다. 키 - 값 데이터를 사용하면 더 이상 명확하게 지정된 데이터 유형이나 매개 변수가 없기 때문에 문서화가 중요 해집니다.

관련 문제