我如何弄清楚WCF服务的期望?

时间:2012-06-21 21:32:24

标签: wcf node.js soap

我正在使用Node.js和wcf.js模块(npm install wcf.js) 我尝试使用的服务是https://webservice.kareo.com/services/soap/2.1/

我已经知道这个https://webservice.kareo.com/services/soap/2.1/KareoServices.svc?xsd=xsd0包含服务要接收的内容,而这些https://webservice.kareo.com/services/soap/2.1/KareoServices.svc?wsdl=wsdl0是提交它们的原因。

我如何弄清楚我应该如何构建请求呢? 这是我的wcf.js

给出的例子
var BasicHttpBinding = require('wcf.js').BasicHttpBinding
  , Proxy = require('wcf.js').Proxy
  , binding = new BasicHttpBinding()
  , proxy = new Proxy(binding, " https://webservice.kareo.com/services/soap/2.1/")
  , message = '<Envelope xmlns=' +
            '"http://schemas.xmlsoap.org/soap/envelope/">' +
                 '<Header />' +
                   '<Body>' +
                     '<GetData xmlns="http://tempuri.org/">' +
                       '<value>GetAppointments</value>' +
                     '</GetData>' +
                    '</Body>' +
               '</Envelope>'

proxy.send(message, "http://www.kareo.com/api/schemas/KareoServices/GetAppointments", function(response, ctx) {
  console.log(response)
});

2 个答案:

答案 0 :(得分:2)

根据wsdl,此服务使用BasicHttpBinding,这意味着不使用ws-secrutiy或寻址。在这种情况下,wcf.js只会在使用request之上为您带来很多附加值,但您仍然可以使用wcf.js.你需要正确设置3个值 - url,soapaction(代理ctor中的第二个参数)和soap。我建议通过为此服务生成ac#client获取所有3个值,验证客户端是否正常工作,然后设置fiddler并将客户端指向“http:// localhost:8888”,这样您就可以在fiddler中看到所有3个值并且可以配置它们。

答案 1 :(得分:1)

我对wcf.js没有任何经验但是,如果你只是需要看看你应该如何构建你的肥皂信封来提出请求,我建议你启动wcftestclient并连接到该服务。连接后,您可以调用任何操作并查看soap消息。这是GetAppointments操作的空请求。

<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://www.kareo.com/api/schemas/KareoServices/GetAppointments</Action>
      </s:Header>
      <s:Body>
        <GetAppointments xmlns="http://www.kareo.com/api/schemas/">
          <request xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <RequestHeader i:nil="true" />
            <Fields i:nil="true" />
            <Filter i:nil="true" />
          </request>
        </GetAppointments>
      </s:Body>
    </s:Envelope>