【发布时间】:2015-08-14 11:03:39
【问题描述】:
我想通过一个小的 node.js 应用程序使用 Microsoft Dynamics NAV 2009 中的 WebService。服务本身运行良好,我将它与 c# 应用程序 一起使用,现在我想将数据输入到我的 nodejs/expressjs 应用程序中,但是,我总是得到Invalid WSDL URL一条错误消息。
这是我的浏览器看到的 WSDL。
现在我尝试按照文档通过正常和基本身份验证与 node-soap 连接,但每次我收到 Invalid WSDL URL 错误。
以下是我尝试的测试连接方法:
var url = "http://navsrv:7047/DynamicsNAV2/WS/Produktiv/Page/WDCETA";
var auth = "Basic " + new Buffer("*********" + ":" + ****************").toString("base64");
soap.createClient(url, function(err, client) {
console.log('Without basic out:');
if (err)
{
console.log('[ERROR] -> ');
console.log(err);
}
console.log(client);
});
soap.createClient(url, {wsdl_headers: {Authorization: auth} }, function(err, client) {
console.log('With basic out:');
if (err)
{
console.log('[ERROR] -> ');
console.log(err);
}
console.log(client);
});
这是我得到的回应:
Without basic out:
[ERROR] ->
[Error: Invalid WSDL URL: http://navsrv:7047/DynamicsNAV2/WS/Produktiv/Page/WDDCETA
Code: 401
Response Body: ]
undefined
With basic out:
[ERROR] ->
[Error: Invalid WSDL URL: http://navsrv:7047/DynamicsNAV2/WS/Produktiv/Page/WDDCETA
Code: 401
Response Body: ]
undefined
【问题讨论】:
-
经过一点调试,我发现我必须发送一个 ntml/negotiate 标头而不是基本的 auth 标头。我将尝试使用 node-soap 来完成它以发送协商标头,然后相应地编辑/回答这个问题
-
可以使用httpntlm客户端,这里有一个完整的例子:stackoverflow.com/a/68823338/10030693