I would suggest calling ToString() explicitly, e.g.
ht["transactionID"] = UUID.Random().ToString()
This is what the OpenSimulator code appears to do.
On 28/11/14 23:04, David Lloyd wrote:
The error given by the Money Server is:
Money # 04:57:46 - [MONEY RPC]: handleCancelTransfer: Exception occurred when
transaction
94786877-9ed6-4d36-98d7-9a88f7b52acf: System.NullReferenceException: Object
reference not set to an instance of an object
at OpenSim.Grid.MoneyServer.MoneyXmlRpcModule.handleCancelTransfer
(Nwc.XmlRpc.XmlRpcRequest request,
System.Net.IPEndPoint remoteClient) [0x00000] in <filename unknown>:0
This is because it’s attempting to dereference a string (if I do
UUID.Random().ToString()) or an empty value.
DSL
On 29 Nov 2014, at 9:30 am, David Lloyd <lloy0...@adam.com.au
<mailto:lloy0...@adam.com.au>> wrote:
Hi There,
TL;DR I can’t get NWC-RPC to encode .NET object such as OpenMetaverse’s UUID or
System.Net.IEndpoint - anyone know how
to do this?
I am trying to get the NWC-RPC .NET module to communicate with my money server.
The money server registers XML RPC
calls with the grid like this:
m_httpServer.AddXmlRPCHandler("CancelTransfer", handleCancelTransfer)
The handleCanceTransfer’s signature looks like this:
public XmlRpcResponse handleCancelTransfer(XmlRpcRequest request, IPEndPoint
remoteClient)
My code looks like this (and it’s a copy/paste with a few tweaks from here):
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net <http://System.Net>;
using Nwc.XmlRpc;
using OpenMetaverse;
namespace Call_With_NWC
{
class MainClass
{
public static void Main(string[] args)
{
System.Net.ServicePointManager.CertificatePolicy = new
ITrustAllCertificates();
Hashtable ht = new Hashtable();
ht["remoteClient"] = new
IPEndPoint(IPAddress.Parse("192.168.0.1"), 80);
ht["secureCode"] = "code";
ht["transactionID"] = UUID.Random(); // UUID Line
Console.WriteLine("New GUID: " + ht["transactionID"]);
List<Hashtable> parameters = new List<Hashtable> { ht };
XmlRpcRequest request = new XmlRpcRequest("CancelTransaction",
parameters);
Hashtable response;
try {
// response =
(Hashtable)request.Invoke("https://192.168.0.164:8008");
response =
(Hashtable)request.Invoke("http://192.168.0.1:9000");
Console.WriteLine("It seems to have worked...");
foreach (var key in response.Keys)
{
Console.WriteLine("Key: " + key + " => " +
response[key]);
}
} catch (Exception ex) {
Console.WriteLine("Got an exception:\n" + ex.ToString());
}
}
}
}
The money server consistently complains that the secureCode and UUID are empty
- when in fact…they are…because I wrote
up a little “Dump the request” server and get:
Message of length 348 was defined but not a blessed scalar.
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>
CancelTransaction
</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>
transactionID
</name>
<value/>
</member>
<member>
<name>
remoteClient
</name>
<value/>
</member>
<member>
<name>
secureCode
</name>
<value>
<string>
code
</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
In fact, the NWC-XML-RPC is behaving as though it doesn’t know how to encode
anything but plain strings. The
transactionID should be the type OpenMetavers.UUID (which seems to be a wrapper
around GUUID) and remoteClient should
be an IEndPoint from System.Net <http://system.net/>.
Obviously I’m missing something but I’m not sure what.
How does one encode OpenMetaverse and other .NET objects so that the XML-RPC
client on the other end is able to decode
them?
DSL
_______________________________________________
Opensim-users mailing list
Opensim-users@opensimulator.org <mailto:Opensim-users@opensimulator.org>
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-users
_______________________________________________
Opensim-users mailing list
Opensim-users@opensimulator.org
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-users
--
Justin Clark-Casey (justincc)
OSVW Consulting
http://justincc.org
http://twitter.com/justincc
_______________________________________________
Opensim-users mailing list
Opensim-users@opensimulator.org
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-users