2012-05-02 2 views
4

나는 HTTP가 상태 비 저장이라는 개념을 가지고 있었기 때문에 HTTP를 통한 SOAP (웹 서비스의 경우) 또한 상태 비 저장 (stateless)이다. 나는 상태가 인 것을 "물건의 상태"라고 생각했습니다. 예를 들어 Employee 클래스와 setSalarygetSalary이라는 메서드가 있다고 가정합니다. 웹 서비스 호출자가 setSalary을 호출하고 급여 1000을받는 경우 getSalary이 호출되면 호출자는 반드시 값 10000을 가져야하지 않아야합니다. getsalary을 테스트하고 1000 (즉, setSalary에 의해 할당 된 값)을 얻었을 때 나는 Employee 개체의 상태가 어떻게 유지되는지 궁금합니다.웹 서비스 (HTTP를 통한 SOAP)를 호출하는 것은 무엇을 의미합니까?

스택 오버플로 질문 Webservices are stateless?에는 상태를 유지하는 데 사용되는 쿠키와 같은 트릭이 포함되어 있지만 상태를 유지하기 위해 명시 적으로 노력하지 않았으므로 Employee 오브젝트의 상태는 어떻게 유지 되었습니까?

나는 상태/무국적이라는 개념을 오해 한 경우 알려 주시기 바랍니다.

+0

참조 된 게시물에서 제공된 답변을 읽어보십시오. "무국적자"가 의미하는 바를 정확하게 설명합니다. 짧은 요약 : 웹 서비스는 이전 또는 이후 요청에 대해 알지도 모릅니다. 귀하의 요청을 처리하고 귀하가 요청한 것을 반환합니다. – Styxxy

+0

@Styxxy 내가 getSalary를 호출했을 때 나는 1000을 얻었으므로 혼란스러워졌다. 나는 상태를 유지하기 위해 어떤 노력도하지 않았다 ???그럼 어떻게 그게 happeend 했습니까 ??? – Pritesh

+0

설정 요청이 이미 처리되었으므로 가져 오기 요청도 새 데이터를 가져옵니다. webservice의 무국적 상태는 동일한 이름이지만 응용 프로그램에서 객체의 상태와 관련이 없습니다. – Styxxy

답변

9

무국적은 후속 요청과 응답간에 서비스 상태가 유지되지 않는다는 의미입니다. 인 반면, 상태 인에서는 상태가 후속 요청간에 지속되므로 각 요청은 이전 요청에서 변경된 사항을 파악하고 유지해야합니다.

은행 응용 프로그램은 상태 저장 응용 프로그램의 한 예이며 사용자가 처음 로그인 한 다음 트랜잭션을 만들고 로그 아웃합니다. 로그 아웃 후 사용자가 트랜잭션을 시도하면이를 수행 할 수 없습니다.

예, http 프로토콜은 기본적으로이 상태 우리가 HTTP 쿠키의 사용을 만드는하지만 상태가없는 프로토콜입니다. SOAP는 기본적으로 사용됩니다. 그러나 그것은 마찬가지로 당신이 사용하고있는 프레임 워크에 의존하여 상태를 유지할 수 있습니다.

제공하신 경우, 후속 요청 또는 동일한 요청에서 값을 설정하고 가져 오려고합니까? 그런 다음에 대해서만 언급 할 수 있습니다.

+0

2 웹 서비스 호출 1. setSalary 2. getSalary를 차례로 호출합니다. – Pritesh

+0

이러한 방법으로 웹 서비스 클래스를 공유 할 수 있습니까? – shashankaholic

3

HTTP와 같은 상태 비 저장 프로토콜에서 각 요청은 독립적입니다. 각 요청에서 클라이언트는 서버를 호출하고 서버가 응답합니다. 각 요청은 독립적입니다. 클라이언트는 각 요청마다 서버와의 관계를 재설정해야합니다. 그렇다고해서 서버가 이전 요청을 잊어 버린 것은 아닙니다. 클라이언트가 직원의 급여를 요청하면 서버는 해당 직원에 대한 급여 정보로 응답합니다. 그게 뭐야 getSalary을 의미합니다. 그리고 클라이언트가 서버에 직원의 급여가 무엇인지 알려주면 서버는 해당 직원의 급여 값을 저장합니다. 그것이 바로 setSalary의 의미입니다.

getSalary 전에 setSalary을 수행하면 설정 한 값으로 돌아갑니다. 그 밖의 무엇을 기대합니까? 실제로 값으로 저장하지 않고 요청에서 그 값을 반환하게하는 setSalary 메서드의 요점은 무엇입니까?

관련 문제