2012-07-06 178 views
0

任何建議/解決方案/提示將不勝感激。使用powerbuilder 12.5調用web服務方法返回null響應

我使用PowerBuilder 12.5來調用.Net Web服務,並且調用工作正常,並且由發送有效XML響應的WS接收,但由PB加載時的響應對象爲空。

代理項目正在使用.Net選項生成PB代理。一些WS方法工作正常,在PB代碼中可以訪問響應對象,但在調用某些其他WS方法時,即使響應XML正確且包含預期值(使用fiddler捕獲),分配用於保存WS方法響應的PB對象也爲null )。在視覺檢查中,由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>[email protected]</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響應:小提琴手捕獲:

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> 

回答

0

你並不需要創建得到由服務調用返回的結構的實例。所有你需要做的就是聲明它 - 並將它填充爲方法調用的返回值。

取出CREATE語句。

+0

嗨保羅,謝謝,但它沒有區別。在兩次WS方法調用之前,我嘗試了使用和不使用create response object語句的代碼。 GroupInsert()仍填充響應,但無論我是否使用create response object語句,BulkImport()都返回null。 – 2012-07-09 01:14:59