게시판 본문 ASP, ASP.NET, IIS & Script - Read Only
re: soap메세지및 파일을 받아서 서버에 저장하고 리턴시킬려고 하는데.. |
---|
작성자: 송원석
작성일시: 2005-10-18 00:50,
조회수: 4,083
|
안녕하세요? 송원석입니다. ^_^
저도 웹 서비스를 잘 아는 것은 아니지만 몇 가지 의견을 드려보겠습니다. 일단 어떤 메세지가 전송되고 또 어떤 메세지가 리턴되어야 하는지는 해당 업무 로직을 모르는 저로서는 전혀 알 수가 없습니다. 단지 기본적인 SOAP 프로토콜과 올려주신 메세지에 의거하여 추측을 할 뿐이죠. 따라서 제 의견은 말 그대로 의견으로만 참고해주셨으면 좋겠습니다. 웹 서비스를 잘 아시는 다른 분들이 보시면 아마 제 의견이 틀렸다고 말씀하실 수도 있으실 것 같네요, 그러나 그 전체적인 윤곽은 대략 이렇습니다. 먼저 전송되어오는 HTTP 메세지를 살펴보니 POST 방식을 사용한 메세지인 것으로 보입니다. SOAP 이라고는 해도 어짜피 HTTP 프로토콜을 타고 전달되는 문자열의 일종일 뿐입니다. 물론 .NET 과 같이 내부적으로 툴킷이 제공되어 편하게 파싱할 수 있으면 금상첨화이겠습니다만, 만약 그렇지 않다고 해도 HTTP 프로토콜에 의거하여 쉽게 해석이 가능합니다. 이렇게 생각을 해보시면 좋을 것입니다. 일반적인 웹 페이지가 있고 거기에 FORM 태그가 하나 있다고 가정을 해보겠습니다. FROM 태그 내부에 Textbox 타입의 INPUT 태그가 두 개 있으며 각각 그 이름이 A 와 B 라고 해보죠. 그러면 이 FORM 이 전송되는 경우 HTTP 프로토콜에 의거하여 A 와 B 항목의 값이 서버로 전송됩니다. 이 때 전송방식이 GET 이냐 POST 냐에 따라서 내부적으로 약간씩 구현이 바뀌어지는 것은 물론입니다. 다시 한 번 가정을 해보겠습니다. A 항목에는 단순한 문자열들로 구성된 XML 문자열들이 주르륵 들어간다고 생각해보겠습니다. 논리적으로야 이것들이 XML 문자열들이지만 사실 HTTP 프로토콜은 그게 무언지 신경쓰지도 않습니다. 단지 말 그대로 문자열일 뿐이죠. B 항목에는 이미지 파일, 즉 JPG 파일이 들어간다고 생각을 해보죠. 이런 경우에는 GET 방식으로 전송하기에는 무리가 따르므로 POST 방식으로 전송되며 인코딩 방식을 선택해야만 합니다. 또한 이미지 파일을 그냥 문자열로 전송할 수는 없으므로 BASE 64 인코딩을 사용하여 문자열 형태로 변환하여 전송을 합니다. 이런 대략적인 결과로 얻어지는 결과가 바로 김수민님께서 올려주신 전체 SOAP 메세지가 되는 것이죠. 단 이 경우 FORM 태그를 사용하여 메세지가 만들어지는 것이 아니라 뭔가 다른 기술적인 장치가 사용된다는 점만 다를 뿐입니다. 아마 제 생각엔 자바쪽에서 생성되는 메세지가 아닌가 생각됩니다만... 아무튼 SOAP 메세지를 해석하기 위해서 반드시 이쪽 편에서도 SOAP 에 관련된 무엇인가가 기술적으로 제공되어야 할 필요는 없다는 점이 요점입니다. 즉 어떤 방식을 사용하든지 데이터를 읽어서 해석할 수만 있으면 된다는 것입니다. 일단 올려주신 메세지와 같은 전체 내용을 문자열 형태로 얻어냅니다. 프로그래밍 언어에 따라서 여러가지 방법이 있을 수 있겠죠. 그리고 그게 어떤 방법이든 FORM 과 관련된 방법이겠죠? 왜냐하면 POST 로 메세지가 전송되었으니까요. 전체를 한 번에 다 얻어내시거나 또는 조각조각 나누어서 얻어내실 수도 있을 것입니다. 지금과 같은 경우 메세지가 크게 두 부분으로 나뉘는데 그 기준이 다음과 같은 문자열 패턴이네요. --NextPart_XXX_XXXX_XXXXXXXX.XXXXXXXXXX그러면 문제는 간단합니다. 이 문자열 패턴을 기준으로 전체 문자열들을 쪼개십시요. 그러면 지금과 같은 경우 첫 번째 조각에는 XML 문자열이, 두 번째 조각에는 BASE64 인코딩된 이미지 파일이 들어 있겠죠? 이제 문제가 많이 간단해졌습니다. 두 부분의 데이터를 처리하시기만 하면 되는 것죠. 먼저 XML 데이터에 관해서 알아보겠습니다. 이 XML 데이터가 바로 문제의 SOAP 메세지인 셈인데 XML 파서등을 사용하여 데이터를 읽어내셔도 되고 단순하게 문자열을 파싱하셔도 됩니다. 다만 각각의 노드들이 가지고 있는 의미는 제가 알 수 없는 내용입니다. 이 부분은 메세지를 전송하는 그 업체로부터 정확한 내용을 알아내셔야만 합니다. 그리고 두 번째 부분은 BASE64 인코딩된 파일의 내용이므로 당연히 BASE64 디코딩을 해주고 그 결과를 이진 파일로 쓰면 되는 것이죠. 과정은 복잡하지만 원리는 단순하기 그지 없습니다. 결국 XML 로부터 얻어낸 데이터는 데이터베이스 등의 장소에 저장하면 되고 이미지 파일은 적당한 경로에 저장을 해주면 되겠죠. 이제 리턴 메세지를 만드는 방법에 대해서 알아보겠습니다. 리턴 메세지의 구조는 업체측에 샘플을 하나 달라고 하시는 것이 좋을 것 같습니다. XML 의 구조등 그쪽에서 미리 정의한 패턴이 있을 테니까요. 그러면 그대로 XML 문자열을 만드시면 되겠죠. 물론 이 경우에도 XML 관련 개체를 사용하여 XML 문자열을 만들어도 되지만 그냥 평범한 문자열 함수들을 사용하여 XML 문자열을 만든다고 해도 문제가 될 것은 없습니다. 단 구조만 정확하게 만들어준다면 말이죠. 이제 이렇게 만든 XML 문자열을 재전송 해주어야 하는데 이 때 지금까지의 상황으로 추측해본다면 아마도 POST 방식으로 전송을 해주어야 하지 않나 싶네요. 각각의 단계에 대한 구체적인 방법들은 제 의견을 먼저 읽어보시고 나서 수용하실수 있겠다는 판단이 드시면 방법을 강구해보시는 것이 좋을 것 같습니다. 감사합니다. |
IP 주소: 211.226.150.132
|
게시물 | ||||
---|---|---|---|---|
1,332 | 2005-11-01 | 6,184 | ||
1,331 |
궁금이 |
2005-10-31 | 1,517 | |
1,330 | 2005-10-31 | 3,438 | ||
1,329 |
궁금이 |
2005-10-31 | 2,829 | |
1,328 | 2005-10-31 | 3,994 | ||
1,327 |
영이 |
2005-10-25 | 1,691 | |
1,326 | 2005-10-25 | 3,475 | ||
1,325 |
궁금이 |
2005-10-18 | 1,707 | |
1,324 | 2005-10-19 | 3,569 | ||
1,323 |
김수민 |
2005-10-17 | 2,995 | |
2005-10-18 | 4,083 | |||
1,321 |
김수민 |
2005-10-18 | 2,024 | |
1,320 | 2005-10-19 | 3,701 | ||
1,319 |
정규식 표현 질문.... [1] |
영이 |
2005-10-05 | 1,438 |
1,318 | 2005-10-06 | 3,768 | ||
1,317 |
영이 |
2005-10-06 | 1,289 | |
1,316 |
영이 |
2005-09-30 | 1,519 | |
1,315 | 2005-09-30 | 4,138 | ||
1,314 |
영이 |
2005-09-30 | 1,311 | |
1,313 |
파일 큐브 질문입니다. [1] |
궁금이 |
2005-09-28 | 1,222 |
1,312 |
훈스 |
2005-09-28 | 1,283 | |
1,311 | 2005-09-28 | 3,635 | ||
1,310 | 2005-09-28 | 6,628 | ||
1,309 |
궁금이 |
2005-09-28 | 1,241 | |
1,308 | 2005-09-28 | 3,443 |