2017-03-16 4 views
1

node-soap module을 사용하여 SOAP 웹 서비스를 사용하려고합니다. 그러나 웹 서비스 메서드 중 하나를 호출 할 때 '응답을 구문 분석 할 수 없습니다'라는 오류 메시지가 나타납니다. 오류가 발생합니다. node.js로 SOAP 서비스를 사용하는 동안 응답 오류를 구문 분석 할 수 없습니다.

var soap = require('soap'); 
var url = 'http://myservice.com/MyService.svc?wsdl'; 
var args = { 
    Username: '***', 
    Password: '***' 
}; 

soap.createClient(url, function(err, client) { 
    if (!err) {  
     client.MyService(args, function(err, response) { 
      if (!err) { 
       console.log('MyService response:', response); 
      } else { 
       console.log('Error in MyService:', err); 
      } 
     }); 
    } else { 
     console.log('Error in createClient: ', err); 
    } 
}); 

가 어떻게이 문제를 해결할 수 있습니다 여기에

는 구현입니까?

답변

3

문제를 발견했습니다. 웹 서비스가 application/soap + xml 콘텐츠 유형을 예상하는 동안 콘텐츠 유형은 텍스트/xml입니다. 그래서 forceSoap12Headers :에 추가했습니다. 노드 비누가 SOAP 1.2 버전을 사용하도록 강제하는 매개 변수는 createClient()입니다. 또한 ws-addressing 헤더가 비누 헤더에 추가되었습니다. 왜냐하면 때문에 To ''메시지가 수신자에서 처리 될 수 없습니다. 이는 EndpointDispatcher에서 AddressFilter가 일치하지 않기 때문에 오류입니다.

전체 코드 :

var soap = require('soap'); 
var url = 'http://myservice.com/MyService.svc?wsdl'; 
var args = { 
    Username: '***', 
    Password: '***' 
}; 
var soapOptions = { 
    forceSoap12Headers: true 
}; 
var soapHeaders = { 
    'wsa:Action': 'http://tempuri.org/MyPortName/MyAction', 
    'wsa:To': 'http://myservice.com/MyService.svc' 
}; 

soap.createClient(url, soapOptions, function(err, client) { 
    if (!err) { 
     client.addSoapHeader(soapHeaders, '', 'wsa', 'http://www.w3.org/2005/08/addressing'); 
     client.MyService(args, function(err, response) { 
      if (!err) { 
       console.log('MyService response:', response); 
      } else { 
       console.log('Error in MyService:', err); 
      } 
     }); 
    } else { 
     console.log('Error in createClient: ', err); 
    } 
}); 
0

이 코드 client.setSecurity (새 soap.BasicAuthSecurity ('이름', '비밀번호'))를 추가; 클라이언트 작성 후 . 그것은 나를 위해 일했다 :

var soap = require('soap'); 
var url = 'http://myservice.com/MyService.svc?wsdl'; 
soap.createClient(url, function(err, client) { 
if (!err) {  
     client.setSecurity(new soap.BasicAuthSecurity('username', 'password')); 
     client.MyService(args, function(err, response) { 
     if (!err) { 
      console.log('MyService response:', response); 
     } else { 
      console.log('Error in MyService:', err); 
     } 
    }); 
} else { 
    console.log('Error in createClient: ', err); 
} 
});