/////////////////////////////////////////////////////////////////
//
// (C) Copyright 2013, Kenneth, Inc.
// All rights reserved. Confidential. Except as pursuant
// to a written agreement with Kenneth, this software may
// not be used or distributed. This software may be covered
// by one or more patents.
//
// 本软件为Kenneth开发,版权所有,违者必究,320325198102218110
//
/////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using Newtonsoft.Json;
namespace GummingCommon
{
///
/// 后台服务调度引擎
///
public sealed class ServiceEngine
{
///
///
///
///
///
public static string DealErrorInfo(string errorCode)
{
OutEntity oe = new OutEntity() { ErrorCode = errorCode };
return JsonConvert.SerializeObject(oe);
}
private static object InvokeMethodBase(string assemblyName, string classType, string methodName, string currentUserId, string currentClientId, object currentSendParameter, Type paratype)
{
object outEntity = null;
//加载 Assembly
Assembly assembly = null;
if (assemblyName != "")
{
try
{
assembly = Assembly.Load(assemblyName);
}
catch (Exception ep)
{
throw new Exception(ErrorCode.LoadAssemblyError, ep);
}
}
else
{
return DealErrorInfo(ErrorCode.LoadAssemblyConfigError);
}
if (assembly == null)
{
return DealErrorInfo(ErrorCode.LoadAssemblyConfigError);
}
//加载类型
Type type = null;
if (classType != "")
{
try
{
type = assembly.GetType(classType);
}
catch (Exception ep)
{
throw new Exception(ErrorCode.GetAssemblyTypeError, ep);
}
}
else
{
return DealErrorInfo(ErrorCode.GetAssemblyTypeConfigError);
}
if (type == null)
{
return DealErrorInfo(ErrorCode.GetAssemblyTypeConfigError);
}
//加载类型
MethodInfo methodInfo = null;
if (methodName != "")
{
try
{
Type[] typeArray = new Type[3];
typeArray.SetValue(typeof(string), 0);
typeArray.SetValue(typeof(string), 1);
typeArray.SetValue(paratype, 2);
methodInfo = type.GetMethod(methodName, typeArray);
}
catch (Exception ep)
{
throw new Exception(ErrorCode.GetAssemblyMethodError, ep);
}
}
else
{
return DealErrorInfo(ErrorCode.GetAssemblyMethodConfigError);
}
if (methodInfo == null)
{
return DealErrorInfo(ErrorCode.GetAssemblyMethodConfigError);
}
//产生实例
Object objectInstance = null;
if (classType != "")
{
try
{
objectInstance = assembly.CreateInstance(classType);
}
catch (Exception ep)
{
throw new Exception(ErrorCode.CreateInstanceError, ep);
}
}
else
{
return DealErrorInfo(ErrorCode.CreateInstanceConfigError);
}
if (objectInstance == null)
{
return DealErrorInfo(ErrorCode.CreateInstanceConfigError);
}
//调用方法
try
{
object[] objectParameters = new object[] { currentUserId, currentClientId, currentSendParameter };
outEntity = methodInfo.Invoke(objectInstance, objectParameters);
}
catch (Exception ep)
{
throw new Exception(ErrorCode.InvokeMethodError, ep.InnerException);
}
return outEntity;
}
///
///
///
///
///
public static string InvokeMethod(string assemblyName, string classType, string methodName, string currentUserId, string currentClientId, string currentSendParameter)
{
return (string)InvokeMethodBase(assemblyName, classType, methodName, currentUserId, currentClientId, currentSendParameter, typeof(string));
}
public static string WriteFile(string assemblyName, string classType, string methodName, string currentUserId, string currentClientId, TestphotofilesEntity file)
{
return (string)InvokeMethodBase(assemblyName, classType, methodName, currentUserId, currentClientId, file, typeof(TestphotofilesEntity));
}
public static byte[] ReadFile(string assemblyName, string classType, string methodName, string currentUserId, string currentClientId, string recid)
{
return (byte[])InvokeMethodBase(assemblyName, classType, methodName, currentUserId, currentClientId, recid, typeof(string));
}
}
}