2016-06-05 2 views
0

Microsoft의 WCFTestClient.exe를 사용하여 호출 할 수있는 웹 서비스가 있습니다. 그러나 Excel 2013에서 웹 서비스를 호출하기 위해 매크로를 만들려고해도 작동하지 않습니다.Excel 2013에서 웹 서비스를 사용하는 방법

오류는 아니지만 실제로 웹 서버에서 메서드 (RunScript)를 실행하지는 않습니다. 내가 성공적으로 웹 서비스를 소비 한 다른 클라이언트를 만들었습니다 때문에이는 웹 서비스의 작동하는

Private Sub web() 


Dim sURL As String 
Dim sEnv As String 
Dim objHTTP As Object 
Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0") 
sURL = "http://testserver:9001/TestService" 

On Error GoTo ErrorLabel 


sEnv = sEnv & "<s:Envelope xmlns:a=""http://www.w3.org/2005/08/addressing"" xmlns:s=""http://www.w3.org/2003/05/soap-envelope"" > " 
sEnv = sEnv & " <s:Header>" 
sEnv = sEnv & " <a:Action s:mustUnderstand=""1"">http://tempuri.org/TestService/RunScript</a:Action>" 
sEnv = sEnv & " <a:MessageID>urn:uuid:9405af92-1f5b-4ead-87</a:MessageID> <a:ReplyTo>" 
sEnv = sEnv & "  <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>" 
sEnv = sEnv & " </a:ReplyTo>" 
sEnv = sEnv & " </s:Header>" 
sEnv = sEnv & " <s:Body>" 
sEnv = sEnv & " <RunScript xmlns=""http://tempuri.org/""/> " 
sEnv = sEnv & " </s:Body>" 
sEnv = sEnv & "</s:Envelope>" 

With objHTTP 
    .Open "GET", sURL, False 
    .setRequestHeader "Content-Type", "text/xml" 
    .send sEnv 
End With 

Set objHTTP = Nothing 
ExitLabel: 
    'Clean-up code, if any, goes here 
    Exit Sub 

ErrorLabel: 
    'Error-handling code goes here 
    Resume ExitLabel 

End Sub 

:

여기 내 코드입니다. 이 Excel 2013 매크로로 무엇을 잘못 했습니까?

** 편집 - WsHttpBinding과 사용하던 위, 나는은 BasicHttpBinding을 사용하도록 전환 :

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/TestService/RunScript</Action> 
    </s:Header> 
    <s:Body> 
    <RunScript xmlns="http://tempuri.org/" /> 
    </s:Body> 
</s:Envelope> 

내가 피들러에서 그것을 실행하지만, 결국 504 얻을 - 게이트웨이 timout을. WCFClient를 실행하고 서비스를 추가 할뿐만 아니라 웹 참조를 추가하여 작은 콘솔 앱을 작성하여 소비 할 수 있습니다.

내가 사용중인 soap xml은 WCFClient 도구의 정확한 값입니다.

미리 감사드립니다.

+0

'. 열거 ", sURL, 거짓"? 서비스 요청이 'GET'요청을 기대합니까? 아마도''POST ", sURL, False'를 열 것인가? –

+0

POST를 시도하면 "400"오류가 발생합니다. – EriqaBana

답변

0

난 당신이 <a:messageId>에 대한 닫는 태그가 없습니다 생각 :

드디어 WCFClient을 실행하고 피들러의 요청에보고 일을 가지고
<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope" > 
    <s:Header> 
    <a:Action s:mustUnderstand="1">http://tempuri.org/TestService/RunScript</a:Action> 
    <a:MessageID>urn:uuid:9405af92-1f5b-4ead-87 
    <a:ReplyTo>   
     <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>  
    </a:ReplyTo> 
    <!-- missing close tag for a:MessageID --> 
    </s:Header> 
    <s:Body>  
    <RunScript xmlns="http://tempuri.org/"/> 
    </s:Body> 
</s:Envelope> 
+0

고마워, 그게 해결되지 않았다. 서비스를 사용하는 콘솔 앱을 작성하기로 결정했습니다. 그리고 나서 Excel 매크로에서 콘솔 앱을 껍질에 넣습니다. – EriqaBana

+0

''섹션이 시작되기 전에 closing 태그가 누락 되었습니까? –

0

.

SOAPAction: "http://tempuri.org/TestService/RunScript" 

을 단순히에 요청 본문을 변경 :

이 헤더로 "이 SOAPAction"를 추가하는 것으로 보인다

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><RunScript xmlns="http://tempuri.org/"/></s:Body></s:Envelope> 

을뿐만 아니라 POST로 동사를 변경하는 등 - 일했다!

관련 문제