xml - 我自己的 SOAP 代码?

标签 xml delphi post soap native

D6 教授

我们必须使用 SOAP XML 服务。 我尝试导入wsdl,并使用Delphi生成的接口(interface),但失败了。

而且:正如我所见,我必须在 XML 部分提供用户名和密码,但我不知道如何使用这个自动界面...

我决定手动提供 XML。 这不是问题,问题是如何发布到服务器... wsdl 导入知道如何调用服务器。它知道 url、端口等。

我想编写自己的代码。因为我认为 SOAP 调用是使用“Post”方法,所以我可以轻松地做到这一点。 但是post需要什么参数呢? SOAP 服务器读取哪些参数?

要理解我在说什么,请看这段代码(FParams : TStrings):

procedure TDDHTTPObject.Post;
var
    WinHttpReq : variant;
    posts : string;
begin
    Result := '';
    WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
    try
        posts := EncodeParamsToURL(FParams);
        URL := URL + '?' + posts;
        WinHttpReq.Open('POST', URL, false);
        WinHttpReq.Send();
        Result := WinHttpReq.ResponseText;
    finally
        WinHttpReq := 0;
    end;
end;

例如:

Params['data'] = xmlstring;

Params['soap'] = xmlstring;

你知道吗?

最佳答案

如果您使用 .NET 作为 Web 服务器,您可以在浏览到 WS URL 时看到方法和原始 XML,即: http://yourdomain.com/ws/ApplicationWebService.asmx

XML 可用于 SOAP 1.1 和 1.2 它可能看起来像这样 (SOAP 1.1):

<?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:Header>
    <UserIdentificationHeader xmlns="http://yourdomain.com/ws">
      <UserAgent>string</UserAgent>
      <UserToken>string</UserToken>
    </UserIdentificationHeader>
  </soap:Header>
  <soap:Body>
    <MyTestMethod xmlns="http://yourdomain.com/ws" />
  </soap:Body>
</soap:Envelope>

接下来我像这样使用“MSXML2.XMLHTTP”:

var
  mhttp: OleVariant;

URL := 'http://yourdomain.com/ws/ApplicationWebService.asmx';
mhttp := CreateOleObject('MSXML2.XMLHTTP');
mhttp.Open('POST', URL, False);  // False=synchronously
mhttp.setRequestHeader('User-Agent', APP_WS_USER_AGENT); // optional
mhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
mhttp.setRequestHeader('SoapAction', 'http://yourdomain.com/ws/' + 'MyTestMethod');

mhttp.send(TheSOAPXML);

if mhttp.Status = 202 then ShowMessage('ACCEPTED OK!');

关于xml - 我自己的 SOAP 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8210263/

相关文章:

Java - XML 解析器性能 : Sun Java Streaming XML Parser (SJSXP) vs Woodstox

sql-server - MsSQL xml 解析为十进制

delphi - 如何在 Delphi 中将常量开放数组分配给 TArray<TVarRec>

PHP post 中的 html 多 <select> 数组

javascript - 设置 POST 请求内容语言的正确方法

javascript - 发布时出现错误的表单数据名称

xml - XML 中的引号。单人还是双人?

c# - 操作数据集

delphi - 如何在 Delphi 6 应用程序中的 Javascript 单击 Chrome 麦克风按钮,或者至少找到该按钮并获取其 Windows 屏幕坐标?

ios - 在 Delphi Firemonkey iOS 开发中使用原生 C 静态库