我自己的SOAP代码?

问题描述:

D6 prof。我自己的SOAP代码?

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

和:我看到我必须在一个XML节提供的用户名和密码,但我不知道如何使用这个自动接口做...

我确定我的手提供XML。 这不是问题,问题是如何发布到服务器... wsdl导入知道如何调用服务器。这是知道的网址,端口等

我想写我自己的代码。我认为SOAP调用是使用“Post”方法,我可以轻松做到。 但是邮件需要什么参数? 哪些参数是SOAP服务器读取的内容?

明白我谈论它,看到这个代码(FParams:字符串列表):

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; 

你知道的东西关于它?

+2

我对电子书籍或印作为的Synapse使用他们对HTTP POST请求有很好的支持(还有更多) – mjn

如果你使用.NET作为Web服务器,你可以看到方法和原始XML当你浏览到WS URL即: 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!'); 

实例化自己的THttpRio组件并将其传递给Web服务调用。在发送到服务之前,使用THttpRio.BeforeExecute事件修改SOAPRequest流。大量的例子,但看看THttprio onBeforeExecute changing the soapRequest作为一个让你去。

+0

我可以导入wsdl的主要问题是,但是该网站的调用是404错误,因此我必须首先连接到它 - 也许与其他MS COM对象。 – durumdara

+0

您原来的问题没有提及404错误。您问过如何在XML部分传入用户名和密码。你可能会考虑改写你的问题,以便你得到问题的答案。 404表示资源不存在。也许WSDL中列出的端点不正确,因此您的单元实现中的默认URL不存在,导致404错误。尝试使用SoapUI进行Web服务调用。这将有助于缩小您的问题到Delphi或Web服务。 –