0

任何建议/解决方案/提示将不胜感激。

我正在使用 PowerBuilder 12.5 来调用 .Net Web 服务,并且该调用有效,并由发送有效 XML 响应的 WS 接收,但 PB 加载时的响应对象为空。

代理项目使用 .Net 选项来生成 PB 代理。一些 WS 方法工作正常,并且响应对象可以在 PB 代码中访问,但是当调用其他一些 WS 方法时,即使响应 XML 正确并且包含预期值(使用提琴手捕获),分配用于保存 WS 方法响应的 PB 对象为空)。在视觉检查中,由 PB 生成的代理似乎与 WSDL 定义相匹配。

我需要能够在代码中检查 WS 方法调用的响应,以便应用程序在失败时可以采取适当的措施。

WSDL 是: http ://cbre.truelogic.com.au/service.asmx?WSDL

PB 代码示例:

相同的 WS,第一个方法调用GroupInsert()有效,但尽管第二个方法调用ContactBulkImportWithGroups()有效,PB 无法解释方法响应并加载响应对象(即使响应 XML 是正确的)。

// Web Service = lws_cl, already created earlier in script.

// Get Group ID - This WS method call works
wspn_campaignlogic_group ln_ret_group
decimal ldc_groupID[1]

ln_ret_group = lws_cl.GroupInsert(ls_groupName)
if isValid(ln_ret_group.GroupResults) then
    if ln_ret_group.GroupResults.ResultCode = 1 then
        ldc_groupID[1] = ln_ret_group.GroupID
    end if
end if

// Contacts - This WS method returns null
wspn_campaignlogic_contactbulkimporter ln_ret_contact   
any la_xml

ln_ret_contact = create wspn_campaignlogic_contactbulkimporter

la_xml = '<contacts><c><f>Jill</f><l>Jackson</l><e>jj@yahoo.com</e><comp>Acme Solutions</comp><sal></sal><p>(02) 8080 1111</p><m></m></c></contacts>'
ln_ret_contact = lws_cl.ContactBulkImportWithGroups(3, ldc_groupID, la_xml, "dd/mm/yyyy")

// Check results
if NOT isValid(ln_ret_contact) then
    // Error - execution goes in here because ln_ret_contact is null so result cannot be checked by code
else
    // OK
end if

XML 响应:由 Fiddler 捕获:

HTTP/1.1 200 OK
Date: Fri, 06 Jul 2012 04:39:42 GMT
Server: Microsoft-IIS/6.0
X-UA-Compatible: IE=8
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 688

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><ContactBulkImportWithGroupsResponse xmlns="http://new.cl.truelogic.com.au/"><ContactBulkImportWithGroupsResult><ImportResults><InvalidContacts><contacts xmlns=""></contacts></InvalidContacts><Updated>1</Updated><Inserted>0</Inserted></ImportResults><ContactImportResults><ResultCode>1</ResultCode><ResultDescription>Success.</ResultDescription></ContactImportResults></ContactBulkImportWithGroupsResult></ContactBulkImportWithGroupsResponse></soap:Body></soap:Envelope>
4

1 回答 1

0

您不需要创建由服务调用返回的结构的实例。您需要做的就是声明它 - 它被填充为方法调用的返回值。

取出那个 CREATE 语句。

于 2012-07-06T18:46:59.263 回答