2017-07-25 16 views
0

RCurlパッケージを使用してWebサービスを使用しようとしています。RCurlを使用したWebサービスへのアクセスCurlPerform:HTTP 500エラーの取得

このWebService「https://ngcsi.contigohosting.com/Entrader_Dev/wcfservices/TradingService.svcは」

認証によってのみアクセスすることができますので、私は、ヘッダー内のユーザー名とパスワードを渡していgetメソッドをたくさん持っています。

h=basicTextGatherer() 
headerFields = 
    c(c(Accept="text/xml", Accept="multipart/*", 
     'Content-Type' = "text/xml; charset=utf-8"), 
     SOAPAction = "https://ngcsi.contigohosting.com/Entrader_Dev/wcfservices/TradingService.svc?wsdl") 

body = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 

xmlns:con="http://entrader.contigoenergy.com/Contigo.Entrader.Service">\ 
    <soapenv:Header>\ 
<wsse:Security soapenv:mustUnderstand="1"\ 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">\ 
<wsse:UsernameToken wsu:Id="UsernameToken-37"\ 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">\ 
<wsse:Username>Username</wsse:Username>\ 
<wsse:Password 
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password>\ 
</wsse:UsernameToken>\ 
</wsse:Security>\ 
</soapenv:Header>\ 
<soapenv:Body>\ 
</soapenv:Body>\ 
</soapenv:Envelope>\n' 

curlPerform(url = "https://ngcsi.contigohosting.com/Entrader_Dev/wcfservices/TradingService.svc", 
      httpheader = headerFields, 
      postfields = body, 
      writefunction = h$update, 
      verbose=TRUE 
) 

body=h$value() 

以下上記とを実行しながら、私はHTTP/1.1 500内部サーバーエラーを取得するには、本文の内容

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><s:Header><o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><u:Timestamp u:Id="_0"><u:Created>2017-07-25T15:14:00.856Z</u:Created><u:Expires>2017-07-25T15:19:00.856Z</u:Expires></u:Timestamp></o:Security></s:Header><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a:ActionNotSupported</faultcode><faultstring xml:lang="en-GB">The message with Action 'https://ngcsi.contigohosting.com/Entrader_Dev/wcfservices/TradingService.svc?wsdl' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).</faultstring></s:Fault></s:Body></s:Envelope> 

あるすべてのヘルプははるかに高く評価されます。ありがとうございました。

答えて

0

SOAPActionにはメソッドが必要です。このインスタンスでは、上記のwsdlに従って以下のいずれかを指定できます。

http://entrader.contigoenergy.com/Contigo.Entrader.Service/TradingService/GetTrade 

http://entrader.contigoenergy.com/Contigo.Entrader.Service/TradingService/GetByFilterTrade

ので、新しいコードは以下の

h=basicTextGatherer() 
headerFields = 
    c(c(Accept="text/xml", Accept="multipart/*", 
     'Content-Type' = "text/xml; charset=utf-8"), 
     SOAPAction = "http://entrader.contigoenergy.com/Contigo.Entrader.Service/TradingService/GetTrade") 

body = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 

xmlns:con="http://entrader.contigoenergy.com/Contigo.Entrader.Service">\ 
    <soapenv:Header>\ 
<wsse:Security soapenv:mustUnderstand="1"\ 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">\ 
<wsse:UsernameToken wsu:Id="UsernameToken-37"\ 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">\ 
<wsse:Username>Username</wsse:Username>\ 
<wsse:Password 
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password>\ 
</wsse:UsernameToken>\ 
</wsse:Security>\ 
</soapenv:Header>\ 
<soapenv:Body>\ 
</soapenv:Body>\ 
</soapenv:Envelope>\n' 

curlPerform(url = "https://ngcsi.contigohosting.com/Entrader_Dev/wcfservices/TradingService.svc", 
      httpheader = headerFields, 
      postfields = body, 
      writefunction = h$update, 
      verbose=TRUE 
) 

body=h$value() 

のようになります。上記のコードは動作し、私は何も言及していないが、Webサービスからの適切な応答を取得することができていますこの例の本文では、

関連する問題