У меня очень смутное понимание WCF, но после небольшого исследования я понял, что WCF не нравится обрабатывать пользовательские объекты.Я ищу возможный обходной путь.
Это моя цель.Я стремлюсь создать службу WCF, которая принимает определенные значения от клиентского компьютера, отправляет их на сервер, где он вызывает экземпляр R и выполняет набор преобразований DataFrame и возвращает полученный DataFrame.Кажется, что DataFrames имеют формат векторного / 2D-массива.Я получаю сообщение об ошибке: операция не поддерживается в wcf, поскольку она использует тип system.object [] []
, см. Пример кода ниже -
public string R_to_SQLstring_InsertTable(string table_name, DataFrame Table)
{
string query2 = "INSERT INTO table_name (";
for (int x = 0; x < Table.ColumnCount; x++)
{
if (x == (Table.ColumnCount) - 1)
{
query2 = query2 + Table.Names[x] + "";
}
else
{
query2 = query2 + Table.Names[x] + ", ";
}
}
query2 = query2 + ") Values (";
for (int count1 = 0; count1 < Table.RowCount; count1++)
{
for (int count2 = 0; count2 < Table.ColumnCount; count2++)
{
if (count2 == (Table.ColumnCount) - 1)
{
query2 = query2 + " " + Table[count2][count1];
}
else
{
query2 = query2 + " " + Table[count2][count1] + ",";
}
}
if (count1 == (Table.RowCount) - 1)
{
query2 = query2 + ");";
}
else
{
query2 = query2 + "), (";
}
}
return query2;
}
public DataFrame R_Transformation_MergeTable(string tableloca1, string tableloca2)
{
StartupParameter rinit = new StartupParameter();
rinit.Quiet = true;
rinit.RHome = @"C:\Program Files\R\R-3.4.4\";
rinit.Home = @"C:\R";
REngine.SetEnvironmentVariables();
REngine engine = REngine.GetInstance(null, true, rinit);
try
{
engine.Evaluate("Table1 <- read.csv(file='" + tableloca1+")");
engine.Evaluate("Table2 <- read.csv(file='" + tableloca2 + ")");
DataFrame Table = engine.Evaluate("Merge <- merge(Table1,Table2)").AsDataFrame();
return Table;
}
catch (Exception x)
{
throw new Exception("Please Upload .CSV file");
}
}