1. Alan Rice
  2. PowerBuilder
  3. Tuesday, 18 September 2018

Hi,

I hope someone can shed some light on this issue as I'm not having much luck getting to the bottom of it.

I have a SOAP webservice which is currently consumed by a Powerbuilder Desktop App via the .Net SOAP proxy, Coldfusion webpages, and a dot net application. Each of these apps are able to use the service without issue.

When I try to use this SOAP service with Appeon Mobile using the workarounds library I am getting the following error: "Execute call Web Service failed. Error message: AppWebservice:Failed to generate dynamicly Web Service proxy assembly!Message=Unable to import binding 'BasicHttpBinding_IStorage Services' from namespace 'http://tempuri.org"

I've tried to use the same code with a different webservice and it works as expected so there's something unique to this webservice that the mobile app cannot handle but the desktop ones can.

PB Appeon Mobile Code:

appeonwebservicecomponent caller
integer IRet
any paralist[]
String ls_message

// Create Appeon Webservic Component
caller= create appeonwebservicecomponent
caller.calltype = "1"
caller.proxydllorurl =	"http://azurehelloworldappeonmobiletest.azurewebsites.net/AzureService.svc?wsdl"
caller.classdescript = ""

// Call End Point
IRet=caller.of_callwebservice("GetHelloWorld")
if IRet=0 then
  ls_message = String(caller.ReturnValue)
  MessageBox('Success',ls_message)
else
  MessageBox('CUSTOM ERROR',caller.ErrorText)
end if

If I swap out the URL with this one: "http://www.dneonline.com/calculator.asmx?wsdl"  with parameters it works without issue.

Sample WSDL (the support forum is removing the XML when using the code insert option so just plain text below):


name="StorageServices"
targetNamespace="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:tns="http://tempuri.org/"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsa10="http://www.w3.org/2005/08/addressing"
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">

















Other things which may help:
Appeon Test App Source Code: https://github.com/Spunog/appeonmobilesoaptest
Test Webservice: http://azurehelloworldappeonmobiletest.azurewebsites.net/AzureService.svc?wsdl 

 

Alan Rice Accepted Answer Pending Moderation
0
Votes
Undo

I have given up trying to use the calltype = "1" method as I could not see any issue with the SOAP service which I call successfully from other languages and PB desktop using .NET proxy. I compared the WSDLs side by side and could not see anything hugely different so I'm not sure what Appeon Mobile didn't like about it using calltype="1".

I've since started to use the calltype="2" using the .NET proxy with DLLs and this is working for the same SOAP service so I'm going to proceed with that instead. 

I have removed the test soap service address listed above as I only put it up here to help explain the issue.

Thanks for your help.

 

[edit]

Just to add a little more information for anyone else that is trying this.

You must create the .net proxy object as you would normally for a desktop app. This creates a dll file.

(Note: it's also important that Application Profile > Additional Files > Deploy External Files has a listing to the generated dll, this sometimes gets automatically filled in but no harm checking it.)

Here is a cut down sample of the code that worked for me without issue using the dll method.

 

any paralist[]

appeonwebservicecomponent caller
caller= create appeonwebservicecomponent
caller.calltype="2" // 1=use url, 2=use dll
caller.proxydllorurl="MyWebservice.dll"

caller.classdescript="MyWebservice" 
paralist[1]="some_fake_value"
paralist[2]="another_fake_value"
paralist[3]="a_third_value"

integer IRet
IRet=caller.of_callwebservice("GetSomeServiceFunctionName",paralist)

if IRet=0 then
String ls_message
ls_message = String(caller.ReturnValue)
    MessageBox('Success',ls_message)
else
    MessageBox('CUSTOM ERROR',caller.ErrorText)
end if

 

Comment
Glad to hear that!
  1. Zhao Kai
  2. Friday, 21 September 2018
There are no comments made yet.
  1. Thursday, 20 September 2018
  2. PowerBuilder
  3. # 1
Zhao Kai Accepted Answer Pending Moderation
0
Votes
Undo

Hi,

 

Does it is a SOAP 1.2 web service? the 'soap12:address' part like below is missed in your WSDL file. please give a try with SOAP 1.2 web service.

 

-


-


-

 

Regards,

ZhaoKai

Comment
Hi ZhaoKai,



Thanks for the reply.



The end of your message was cut out by the message board but I think I know what you meant.

I've updated the service so it explicitly uses SOAP1.2 in its bindings.



Still having the same results unfortunately. It is working through SoapUI but not my test Mobile app, this is still giving the binding error.
  1. Alan Rice
  2. Wednesday, 19 September 2018
There are no comments made yet.
  1. Wednesday, 19 September 2018
  2. PowerBuilder
  3. # 2
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.