Add additional instrumentation so that when there is an xmlrpc call failure, the actual xml that was returned from the groups service can be logged.
parent
841cd69af7
commit
247fdd1a4d
|
@ -855,16 +855,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
IList parameters = new ArrayList();
|
IList parameters = new ArrayList();
|
||||||
parameters.Add(param);
|
parameters.Add(param);
|
||||||
|
|
||||||
XmlRpcRequest req;
|
ConfigurableKeepAliveXmlRpcRequest req;
|
||||||
if (!m_disableKeepAlive)
|
req = new ConfigurableKeepAliveXmlRpcRequest(function, parameters, m_disableKeepAlive);
|
||||||
{
|
|
||||||
req = new XmlRpcRequest(function, parameters);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// This seems to solve a major problem on some windows servers
|
|
||||||
req = new NoKeepAliveXmlRpcRequest(function, parameters);
|
|
||||||
}
|
|
||||||
|
|
||||||
XmlRpcResponse resp = null;
|
XmlRpcResponse resp = null;
|
||||||
|
|
||||||
|
@ -874,9 +866,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
m_log.ErrorFormat("[XMLRPCGROUPDATA]: An error has occured while attempting to access the XmlRpcGroups server method: {0}", function);
|
m_log.ErrorFormat("[XMLRPCGROUPDATA]: An error has occured while attempting to access the XmlRpcGroups server method: {0}", function);
|
||||||
m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0} ", e.ToString());
|
m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0} ", e.ToString());
|
||||||
|
|
||||||
|
foreach( string ResponseLine in req.RequestResponse.Split(new string[] { Environment.NewLine },StringSplitOptions.None))
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0} ", ResponseLine);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (string key in param.Keys)
|
foreach (string key in param.Keys)
|
||||||
{
|
{
|
||||||
|
@ -961,20 +959,24 @@ namespace Nwc.XmlRpc
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
/// <summary>Class supporting the request side of an XML-RPC transaction.</summary>
|
/// <summary>Class supporting the request side of an XML-RPC transaction.</summary>
|
||||||
public class NoKeepAliveXmlRpcRequest : XmlRpcRequest
|
public class ConfigurableKeepAliveXmlRpcRequest : XmlRpcRequest
|
||||||
{
|
{
|
||||||
private Encoding _encoding = new ASCIIEncoding();
|
private Encoding _encoding = new ASCIIEncoding();
|
||||||
private XmlRpcRequestSerializer _serializer = new XmlRpcRequestSerializer();
|
private XmlRpcRequestSerializer _serializer = new XmlRpcRequestSerializer();
|
||||||
private XmlRpcResponseDeserializer _deserializer = new XmlRpcResponseDeserializer();
|
private XmlRpcResponseDeserializer _deserializer = new XmlRpcResponseDeserializer();
|
||||||
|
private bool _disableKeepAlive = true;
|
||||||
|
|
||||||
|
public string RequestResponse = String.Empty;
|
||||||
|
|
||||||
/// <summary>Instantiate an <c>XmlRpcRequest</c> for a specified method and parameters.</summary>
|
/// <summary>Instantiate an <c>XmlRpcRequest</c> for a specified method and parameters.</summary>
|
||||||
/// <param name="methodName"><c>String</c> designating the <i>object.method</i> on the server the request
|
/// <param name="methodName"><c>String</c> designating the <i>object.method</i> on the server the request
|
||||||
/// should be directed to.</param>
|
/// should be directed to.</param>
|
||||||
/// <param name="parameters"><c>ArrayList</c> of XML-RPC type parameters to invoke the request with.</param>
|
/// <param name="parameters"><c>ArrayList</c> of XML-RPC type parameters to invoke the request with.</param>
|
||||||
public NoKeepAliveXmlRpcRequest(String methodName, IList parameters)
|
public ConfigurableKeepAliveXmlRpcRequest(String methodName, IList parameters, bool disableKeepAlive)
|
||||||
{
|
{
|
||||||
MethodName = methodName;
|
MethodName = methodName;
|
||||||
_params = parameters;
|
_params = parameters;
|
||||||
|
_disableKeepAlive = disableKeepAlive;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Send the request to the server.</summary>
|
/// <summary>Send the request to the server.</summary>
|
||||||
|
@ -989,7 +991,7 @@ namespace Nwc.XmlRpc
|
||||||
request.Method = "POST";
|
request.Method = "POST";
|
||||||
request.ContentType = "text/xml";
|
request.ContentType = "text/xml";
|
||||||
request.AllowWriteStreamBuffering = true;
|
request.AllowWriteStreamBuffering = true;
|
||||||
request.KeepAlive = false;
|
request.KeepAlive = !_disableKeepAlive;
|
||||||
|
|
||||||
Stream stream = request.GetRequestStream();
|
Stream stream = request.GetRequestStream();
|
||||||
XmlTextWriter xml = new XmlTextWriter(stream, _encoding);
|
XmlTextWriter xml = new XmlTextWriter(stream, _encoding);
|
||||||
|
@ -1000,7 +1002,17 @@ namespace Nwc.XmlRpc
|
||||||
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
||||||
StreamReader input = new StreamReader(response.GetResponseStream());
|
StreamReader input = new StreamReader(response.GetResponseStream());
|
||||||
|
|
||||||
XmlRpcResponse resp = (XmlRpcResponse)_deserializer.Deserialize(input);
|
string inputXml = input.ReadToEnd();
|
||||||
|
XmlRpcResponse resp;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
resp = (XmlRpcResponse)_deserializer.Deserialize(inputXml);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
RequestResponse = inputXml;
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
input.Close();
|
input.Close();
|
||||||
response.Close();
|
response.Close();
|
||||||
return resp;
|
return resp;
|
||||||
|
|
Loading…
Reference in New Issue