배경
B2B 로 데이터 교환 시 ServerXMLHTTP는 SSL 통신으로 자주 등장한다. 즉, 상대 업체가 https:// 로 호출해 주길 원하면, ServerXMLHTTP 사용이 불가피 하다는 것이다.
몇 줄 안되는 이 핵심 코드가 인터넷에서는 많은 데, 내 소스에서는 정확히 동작하지 않아, 많은 에러를 냈다. 나 또한 XMLHTTP 방식으로는 그간 별 무리 없이 수행해 왔었지만, 최근 몇 일 동안은 이 보안통신 방법에 막혀 고심해 왔었다. 계속해서 501 Status 만 되돌려 받았으니 말이다.
문제의 해결 과정은 의외로 간단했다. StatusText 라는 메소드를 사용하여 에러의 정확한 메세지를 파악하는 것이었다. 에러 메세지는 다음과 같았다.
"Method post is not defined in RFC 2068 and is not supported by the Servlet API."
위의 문장은 매우 명확하게 현재의 에러를 집어주고 있었다. 왜 진작에 이 에러 메시지를 찾을 생각을 못했을까 후회가 밀려왔다. 황급히 저 메시지를 갖고 구글링을 했다. 친절하게도 나와 같은 고민을 한 사람이 위의 에러를 찾아주었다. 바로 대소문자 구분!
.open "Post", strURL, false --> .open "POST", strURL, false
소스
ASP로 개발했으며, 일부 각색하여 활용했던 소스를 옮겨본다.
Dim strOrgXML, strDocXML, strURL, strXML, strStatus, strStatusText, strString, strFileName,
Dim objDispatch, strResXML
strFileName = request.QueryString("filename")
strURL = https://상대업체주소?filename& strFileName
set strDocXML = createobject("msxml2.DOMDocument")
strDocXML.load "D:\" & strFileName
set strXml=createobject("MSXML2.ServerXMLHTTP")
with strXml
'.SetOption(2)= 13056 ' Ignore all SSL errors
.SetOption(3)= "LOCAL_MACHINE\My\<Certificate Name>"
.open "POST", strURL, false.setRequestHeader "Content-Type", "text/xml"
.setRequestHeader "Content", "text/html;charset=ISO-8859-1(UTF-8)"
.send strDocXML
strStatus = .Status
strStatusText = .StatusText
End Withif strStatus = 200 then
strDocXML.loadXML strXML.responseText
strDocXML.async = true
strDocXML.resolveExternals = false
strDocXML.validateOnParse = false
strDocXML.save Server.MapPath("xml/xmlSample.xml")
strDocXML.load Server.MapPath("xml/xmlSample.xml")
response.ContentType = "text/xml"
strDocXML.save responseelse
response.write "There is following Error<br>"
response.write "Message No : " & strStatus & "<br>"
response.write strStatusText
end if
set strXml = nothing
set strDocXML = nothing
잡담
위의 소스는 실전에서는 .net Application으로 수정하여 작동하도록 할 것이다. 다만 위의 소스는 그 과정 속에서 테스트하는 web app 일 뿐이다. 이제 지루한 테스트는 끝난 것 같다. 갑자기 마음이 가벼워진다. 다른 이들에게도 이와 같은 해방감이 이루어 지길 기도한다.
'PROGRAMMING > ASP.Net' 카테고리의 다른 글
IIS 네트워크 드라이브 연결 (0) | 2018.04.13 |
---|---|
엑셀 파일 업로드 처리 에러 (0) | 2017.10.03 |
DextUploader 에러 처치 방법 (0) | 2013.09.16 |
ResolveUrl 와 ResolveClientUrl 메소드 (0) | 2012.02.21 |
DataTable 데이터 누적 시키기 (0) | 2009.07.31 |
댓글