Dart如何利用SOAP请求?

时间:2016-02-01 20:41:47

标签: soap dart

我正在查找如何在Dart中执行SOAP请求。在查看HTTPRequest时,它实际上只提到了RESTful服务,并希望确保这样做。

现在,我有我的服务器,用户名和密码。试图通过该服务获得成功的身份验证,这样我就可以在进行后续调用时传递一个身份验证令牌。

例如,在.NET中,它执行以下操作,然后将凭证存储在服务器端会话变量中,我将其用作在Dart中进行此操作的起点。

// create web service api object
WebServiceAPI api = new WebServiceAPI();

if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["ProxyUserName"]))
{
    System.Net.NetworkCredential nc = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["ProxyUserName"], ConfigurationManager.AppSettings["ProxyPassword"], ConfigurationManager.AppSettings["ProxyDomain"]);
    System.Net.CredentialCache cc = new System.Net.CredentialCache();
    cc.Add(new Uri(api.Url), "NTLM", nc);
    api.Credentials = cc;
}

api.AuthenticateCredential("api@admin", "admin", 0, 0);
HttpContext.Current.Session["api"] = api;

编辑:我正在添加一些示例数据,以便如果存在黑客,我们可以利用它来获取某些工作,我们可能会抽象它并进行泛化。

service asmx file:  
http://127.0.0.1:1337/service.asmx

Method we will be calling: (AuthenticateCredential)
http://127.0.0.1:1337/service.asmx?op=AuthenticateCredential

The sample SOAP request:
POST /service.asmx HTTP/1.1
Host: 127.0.0.1
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://foo.com/bar/320/Default/AuthenticateCredential"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <AuthenticateCredential xmlns="http://foo.com/barr/320/Default">
      <UserName>string</UserName>
      <Password>string</Password>
      <CurrentSystemLoginID>int</CurrentSystemLoginID>
      <CurrentCustomerID>int</CurrentCustomerID>
    </AuthenticateCredential>
  </soap:Body>
</soap:Envelope>

然后很自然地,我将不得不写出并修改string,string,int,int信封。这样凭证是正确的。

3 个答案:

答案 0 :(得分:3)

我使用Dart为Blackboard的Web服务执行了SOAP操作,因此它是可能的。为此,我必须以编程方式为每个请求构建SOAP信封。请求本身是使用http包的'post'方法发送的。

无法说明您的请求应如何设置,这取决于您尝试访问的网络服务。对于HTTP标头,我发送了'text-type'的'text / xml; charset = utf-8'和指定SOAP方法的'SOAPAction'标头。身体是完整的SOAP信封。

您可能需要玩一下以使用您的服务所需的正确格式/信息来构建信封。我使用xml包来解析/解释响应。

答案 1 :(得分:2)

AFAIK没有解决方案。 Dart只有有限的XML包,我没有看到过实现SOAP本身的尝试。 一种可能的解决方法是委托用另一种语言编写的服务器将REST调用转发为SOAP调用。

答案 2 :(得分:0)

您可以使用DART中的 HTTP POST 发送 SOAP 请求。 这是你如何做到的。

示例网络服务(GlobalWeather

[0] === [0]