public StringBuilder ProcessRequest(EsbExecuteRequest request, Guid workspaceID, Guid dataListID, string connectionId)
{
var channel = new EsbServicesEndpoint();
var xmlData = string.Empty;
if(request.Args != null && request.Args.ContainsKey("DebugPayload"))
{
xmlData = request.Args["DebugPayload"].ToString();
xmlData = xmlData.Replace("<DataList>", "<XmlData>").Replace("</DataList>", "</XmlData>");
}
// we need to adjust for the silly xml structure this system was init built on ;(
if(string.IsNullOrEmpty(xmlData))
{
xmlData = "<DataList></DataList>";
}
IDSFDataObject dataObject = new DsfDataObject(xmlData, dataListID);
dataObject.StartTime = DateTime.Now;
dataObject.EsbChannel = channel;
dataObject.ServiceName = request.ServiceName;
var resource = ResourceCatalog.Instance.GetResource(workspaceID, request.ServiceName);
var isManagementResource = false;
if(resource != null)
{
dataObject.ResourceID = resource.ResourceID;
isManagementResource = ResourceCatalog.Instance.ManagementServices.ContainsKey(resource.ResourceID);
}
dataObject.ClientID = Guid.Parse(connectionId);
dataObject.ExecutingUser = ExecutingUser;
// we need to assign new ThreadID to request coming from here, because it is a fixed connection and will not change ID on its own ;)
if(!dataObject.Environment.HasErrors())
{
ErrorResultTO errors;
if(ExecutingUser == null)
{
throw new Exception("Null Executing User");
}
try
{
// Execute in its own thread to give proper context ;)
var t = new Thread(() =>
{
Thread.CurrentPrincipal = ExecutingUser;
if(isManagementResource)
{
Thread.CurrentPrincipal = Common.Utilities.ServerUser;
ExecutingUser = Common.Utilities.ServerUser;
dataObject.ExecutingUser = Common.Utilities.ServerUser;
}
channel.ExecuteRequest(dataObject, request, workspaceID, out errors);
});
t.Start();
t.Join();
}
catch(Exception e)
{
Dev2Logger.Log.Error(e.Message,e);
}
if(request.ExecuteResult.Length > 0)
{
return request.ExecuteResult;
}
return new StringBuilder();
}
ExecuteMessage msg = new ExecuteMessage { HasError = true };
msg.SetMessage(String.Join(Environment.NewLine, dataObject.Environment.Errors));
Dev2JsonSerializer serializer = new Dev2JsonSerializer();
return serializer.SerializeToBuilder(msg);
}
}