/// <summary>
/// Invoke the object with the request from the input stream.
/// </summary>
/// <param name="inHessian">the Hessian input stream</param>
/// <param name="outHessian">the Hessian output stream</param>
public void invoke(AbstractHessianInput inHessian, AbstractHessianOutput outHessian)
{
inHessian.StartCall();
MethodInfo methodInf = getMethodInfo(inHessian.Method);
//If the method doesn't exist
if (methodInf == null)
{
outHessian.StartReply();
outHessian.WriteFault("NoSuchMethodException",
"The service has no method named: " + inHessian.Method,
null);
outHessian.CompleteReply();
return;
}
ParameterInfo[] paramInfo = methodInf.GetParameters();
Object[] valuesParam = new Object[paramInfo.Length];
for (int i = 0; i < paramInfo.Length; i++)
{
valuesParam[i] = inHessian.ReadObject(paramInfo[i].ParameterType);
}
inHessian.CompleteCall();
Object result = null;
try {
result = methodInf.Invoke(m_Service,valuesParam);
} catch(Exception e) {
//TODO: Exception besser behandeln
if (e.GetType() == typeof(System.Reflection.TargetInvocationException))
{
if (e.InnerException != null)
{
e = e.InnerException;
}
}
outHessian.StartReply();
outHessian.WriteFault("ServiceException", e.Message, e);
outHessian.CompleteReply();
return;
}
outHessian.StartReply();
outHessian.WriteObject(result);
outHessian.CompleteReply();
}