C# 客户端调用wcf服务时返回的混合数据

C# 客户端调用wcf服务时返回的混合数据,c#,wcf,oop,datatable,static,C#,Wcf,Oop,Datatable,Static,我有大约100个客户端调用了wcf服务。 我正在使用消息通道进行此通信。 在我从客户机获得带有参数的请求(该参数包含datatable和字符串)之后,我调用一个静态方法来处理该数据。 我所做的处理是将从客户机接收的数据表与内存缓存数据表连接起来。 如下所示,DTReplyData是数据表。我使用相同的数据表进行输入和输出,即我的数据合同只有一个数据表 public System.ServiceModel.Channels.Message GetData(System.ServiceModel.C

我有大约100个客户端调用了wcf服务。 我正在使用消息通道进行此通信。 在我从客户机获得带有参数的请求(该参数包含datatable和字符串)之后,我调用一个静态方法来处理该数据。 我所做的处理是将从客户机接收的数据表与内存缓存数据表连接起来。 如下所示,DTReplyData是数据表。我使用相同的数据表进行输入和输出,即我的数据合同只有一个数据表

public System.ServiceModel.Channels.Message GetData(System.ServiceModel.Channels.Message messageIn)
    {
        ExecutionOutput requestOperation = messageIn.GetBody<ExecutionOutput>();
        DataTable data = Cache.GetData(requestOperation.OperationName,requestOperation.DTReplyData);


    }    
public static DataTable GetData(string operationName,DataTable inputparameters)
    {
        try
        {

            return filterClientData(operationName, inputparameters);
        }
        catch (Exception ex)
        {                               

            return new DataTable();
        }
    }

    public static DataTable filterClientData(string operationName,DataTable inputparameters)
    {
        DataTable permanentcacheData = new DataTable();
        permanentcacheData = (DataTable)permanentCache[operationName];//this gets data from in memory cache

        if (permanentcacheData != null)
        {

            string[] columnNames = (from dc in inputparameters.Columns.Cast<DataColumn>()
                                    select dc.ColumnName).ToArray();
//Helper method invoked to join tables
                DataTableHelper dt = new DataTableHelper();

            DataTable filteredData = dt.JoinTwoDataTablesOnOneColumn(inputparameters, permanentcacheData, columnNames[0], DataTableHelper.JoinType.Inner);



            filteredData.TableName = "FilteredData";

            return filteredData;
        }
        else
        {

            return permanentcacheData;
        }
    }
public System.ServiceModel.Channels.Message GetData(System.ServiceModel.Channels.Message messageIn)
{
ExecutionOutput requestOperation=messageIn.GetBody();
DataTable data=Cache.GetData(requestOperation.OperationName,requestOperation.DTReplyData);
}    
公共静态DataTable GetData(字符串操作名、DataTable inputparameters)
{
尝试
{
返回FilterClient数据(操作名称、输入参数);
}
捕获(例外情况除外)
{                               
返回新的数据表();
}
}
公共静态DataTable FilterClient数据(字符串操作名、DataTable inputparameters)
{
DataTable permanentcacheData=新DataTable();
permanentcacheData=(DataTable)permanentCache[operationName];//从内存缓存中获取数据
if(permanentcacheData!=null)
{
字符串[]columnNames=(来自inputparameters.Columns.Cast()中的dc)
选择dc.ColumnName).ToArray();
//调用了Helper方法来连接表
DataTableHelper dt=新的DataTableHelper();
DataTable Filteredata=dt.jointowDataTablesOnOneColumn(inputparameters,permanentcacheData,columnNames[0],DataTableHelper.JointType.Inner);
filteredData.TableName=“filteredData”;
返回过滤器数据;
}
其他的
{
返回永久缓存数据;
}
}

我面临的问题是,即使我创建了新对象,连接也会发生。datatable helper已经有一些数据,并且发生了导致错误的数据混淆。这里的任何建议都是因为使用了静态方法?或者是因为我在结果和请求中使用了相同的datamember。理想情况下,这不会造成问题思考。

最有可能的原因是使用静态方法。我的WCF服务混淆了数据,我也遇到了类似的问题,通过从我的方法中删除静态数据解决了这个问题。

“这是因为使用了静态方法吗”-如果不仔细查看您的代码,我会说这很可能是根本原因。您需要特别小心使用
静态
方法,尤其是当它们返回数据时。您可以很容易地遇到wins中的最后一个场景(即,两个请求到达的距离很近,最后一个请求是“赢得”比赛,最后一个请求的数据是混合的)。Tim…感谢您的回答…根本原因是通过引用传递。现在已修复。。