Hi Guys,
I'm using the xml-rpc protocol to connect to a website's api:
code for button:
Class file.
I can see via fiddler that the request is being sent and a response received which is:
The error is: "response contains integer value where struct expected [response : array mapped to type XmlRpcStruct[] : element 0]" on this line: "Dim projectSites As XmlRpcStruct() = proxy.SapeGetProjectSites(Convert.ToInt32(gbAnalysis.Text))"
I declared it as an XmlRpcStruct() in the function, have I done that wrong? theres very little information on this protocol it seems as it's not to popular.
another response is trypically:
Is it the fact the first reponse xml is longer? any help would be great guys!
cheers
Graham
I'm using the xml-rpc protocol to connect to a website's api:
code for button:
VB.NET:
Dim proxy As ISapeXmlRpc = XmlRpcProxyGen.Create(Of ISapeXmlRpc)()
'proxy.UseIntTag = True
Dim userId As Integer = proxy.SapeLogin(formMain.txtUser.Text.Trim(), formMain.txtPass.Text.Trim())
If (userId > 0) Then
Try
'// sape.get_project_sites returns array of sites IDs,
'// You need to declare SapeGetProjectSites as returns XmlRpcStruct()
Dim projectSites As XmlRpcStruct() = proxy.SapeGetProjectSites(Convert.ToInt32(gbAnalysis.Text))
For Each struct As XmlRpcStruct In projectSites
For Each s As String In struct.Keys
MessageBox.Show("Key: " + s + " Value: " + struct.Item(s).ToString())
Next
Next
Catch ex As Exception
formMain.returnMessage("XML-RPC ERROR!" & vbCrLf & vbCrLf & ex.ToString)
End Try
End If
Class file.
VB.NET:
Imports CookComputing.XmlRpc
<XmlRpcUrl("http://api.site.ru/xmlrpc/")>
Public Interface ISapeXmlRpc
Inherits IXmlRpcProxy
<XmlRpcMethod("sape.login", Description:="Login to sape.ru")>
Function SapeLogin(ByVal login As String, ByVal password As String, Optional ByVal md5 As Boolean = False) As Integer
<XmlRpcMethod("sape.get_user", Description:="Get user info")>
Function SapeGetUser() As UserInfo
<XmlRpcMethod("sape.get_balance_locks", Description:="Get balance locks")>
Function SapeGetRealBalance() As XmlRpcStruct
<XmlRpcMethod("sape.get_sites", Description:="Get sites")>
Function SapeGetSites() As XmlRpcStruct
<XmlRpcMethod("sape.get_project", Description:="Get project")>
Function SapeGetProject(ByVal project_id As Integer) As SapeGetProject
<XmlRpcMethod("sape.get_project_sites", Description:="Get project sites")>
Function SapeGetProjectSites(ByVal project_id As Integer) As XmlRpcStruct()
<XmlRpcMethod("sape.project_update", Description:="Project update")>
Function SapeUpdateProject(ByVal project_id As Integer, ByVal project_params As SapeProjectUpdateStruct) As Boolean
End Interface
I can see via fiddler that the request is being sent and a response received which is:
VB.NET:
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<int>1432907</int>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>
The error is: "response contains integer value where struct expected [response : array mapped to type XmlRpcStruct[] : element 0]" on this line: "Dim projectSites As XmlRpcStruct() = proxy.SapeGetProjectSites(Convert.ToInt32(gbAnalysis.Text))"
I declared it as an XmlRpcStruct() in the function, have I done that wrong? theres very little information on this protocol it seems as it's not to popular.
another response is trypically:
VB.NET:
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<int>1135778</int>
</value>
</param>
</params>
</methodResponse>
Is it the fact the first reponse xml is longer? any help would be great guys!
cheers
Graham