Performance Silverlight的一些wcf问题

Performance Silverlight的一些wcf问题,performance,wcf,silverlight,Performance,Wcf,Silverlight,我创建了一个WCF服务,它被多次调用 通话示例 此服务将调用数据库。假设在我的客户机中,我有一个包含200个值的列表。每个值都将匹配一个数据库条目。每个数据库条目都有10个值。现在我要做的是以下几点。我选择一些列表条目并在循环中调用WCF服务 我有两个问题 第一:在WCF调用进行期间,UI将挂起 第二:数据将一步一步地返回,我如何收集数据并在所有通话结束后将其发送回来 请原谅我的拼写错误,我的英语不是最好的 这是我的源代码 [ServiceContract(Namespace = "")] [S

我创建了一个WCF服务,它被多次调用

通话示例 此服务将调用数据库。假设在我的客户机中,我有一个包含200个值的列表。每个值都将匹配一个数据库条目。每个数据库条目都有10个值。现在我要做的是以下几点。我选择一些列表条目并在循环中调用WCF服务

我有两个问题 第一:在WCF调用进行期间,UI将挂起 第二:数据将一步一步地返回,我如何收集数据并在所有通话结束后将其发送回来

请原谅我的拼写错误,我的英语不是最好的

这是我的源代码

[ServiceContract(Namespace = "")]
[SilverlightFaultBehavior]
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.PerCall)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

    [OperationContract]
    public List<string> GetData(string sWert1, string sWert2)
    {
        List<string> realtimanswer = new List<string>();
        string applicationPath = HostingEnvironment.MapPath("~/Configuration");
        cIniReader _ini = new cIniReader(applicationPath + @"\config.ini");
        string connectionString = _ini.ReadString("Database", "ConnectionString", "");
        OracleConnection connection = new OracleConnection();
        connection.ConnectionString = connectionString;
        try
        {
            connection.Open();
            OracleCommand cmd = connection.CreateCommand();
            cmd = new OracleCommand("GETDATA", connection);

            cmd.Parameters.Clear();
            OracleParameter param1 = new OracleParameter("PI_Wert1", OracleDbType.Varchar2);
            OracleParameter param2 = new OracleParameter("PI_Wert2", OracleDbType.Varchar2);
            OracleParameter param3 = new OracleParameter("PO_Wert3", OracleDbType.Int16);
            OracleParameter param4 = new OracleParameter("PO_Wert3", OracleDbType.Int16);
            OracleParameter param5 = new OracleParameter("PO_Wert4", OracleDbType.Int16);

            param1.Value = sWert1;
            param2.Value = sWert2;

            param1.Direction = System.Data.ParameterDirection.Input;
            param1.Size = 4096;
            param2.Direction = System.Data.ParameterDirection.Input;
            param2.Size = 4096;
            param3.Direction = System.Data.ParameterDirection.Output;
            param3.Size = 4096;
            param4.Direction = System.Data.ParameterDirection.Output;
            param4.Size = 4096;
            param5.Direction = System.Data.ParameterDirection.Output;
            param5.Size = 4096;

            cmd.Parameters.Add(param1);
            cmd.Parameters.Add(param2);
            cmd.Parameters.Add(param3);
            cmd.Parameters.Add(param4);
            cmd.Parameters.Add(param5);


            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            //cmd.CommandTimeout = 30;
            int test = cmd.ExecuteNonQuery();

            string returnCode = cmd.Parameters[17 - 1].Value.ToString();
            if (returnCode == "OK")
            {
                string sErg1 = cmd.Parameters[3 - 1].Value.ToString();
                realtimanswer.Add(sErg1);
                string sErg2 = cmd.Parameters[4 - 1].Value.ToString();
                realtimanswer.Add(sErg2);
                string sErg3 = cmd.Parameters[5 - 1].Value.ToString();
                realtimanswer.Add(sErg3);
                string sErg4 = cmd.Parameters[6 - 1].Value.ToString();
                realtimanswer.Add(sErg4);
                string sErg5 = cmd.Parameters[7 - 1].Value.ToString();
                realtimanswer.Add(sErg5);

            }
        }
        catch (Exception exp)
        {
            cDebugLog.Log("Error in Function: GetData " + exp.Message + " StackTrace: " + exp.StackTrace);
            connection.Close();
        }
        connection.Close();
        return realtimanswer;
    }
}
[ServiceContract(Namespace=”“)]
[SilverlightFaultBehavior]
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Single,InstanceContextMode=InstanceContextMode.PerCall)]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
[经营合同]
公共列表GetData(字符串sWert1、字符串sWert2)
{
List realtimanswer=新列表();
字符串applicationPath=HostingEnvironment.MapPath(“~/Configuration”);
cIniReader\u ini=新的cIniReader(applicationPath+@“\config.ini”);
字符串connectionString=_ini.ReadString(“数据库”、“连接字符串”和“”);
OracleConnection=新的OracleConnection();
connection.ConnectionString=ConnectionString;
尝试
{
connection.Open();
OracleCommand cmd=connection.CreateCommand();
cmd=新的OracleCommand(“GETDATA”,连接);
cmd.Parameters.Clear();
OracleParameter param1=新的OracleParameter(“PI_Wert1”,OracleDbType.Varchar2);
OracleParameter param2=新的OracleParameter(“PI_Wert2”,OracleDbType.Varchar2);
OracleParameter param3=新的OracleParameter(“PO_Wert3”,OracleDbType.Int16);
OracleParameter param4=新的OracleParameter(“PO_Wert3”,OracleDbType.Int16);
OracleParameter param5=新的OracleParameter(“PO_Wert4”,OracleDbType.Int16);
param1.Value=sWert1;
param2.Value=sWert2;
param1.Direction=System.Data.ParameterDirection.Input;
参数1.尺寸=4096;
param2.Direction=System.Data.ParameterDirection.Input;
参数2.尺寸=4096;
param3.Direction=System.Data.ParameterDirection.Output;
参数3.尺寸=4096;
param4.Direction=System.Data.ParameterDirection.Output;
参数4.尺寸=4096;
param5.Direction=System.Data.ParameterDirection.Output;
参数5.尺寸=4096;
cmd.Parameters.Add(param1);
cmd.Parameters.Add(param2);
cmd.Parameters.Add(param3);
cmd.Parameters.Add(param4);
cmd.Parameters.Add(param5);
cmd.CommandType=System.Data.CommandType.StoredProcess;
//cmd.CommandTimeout=30;
int test=cmd.ExecuteNonQuery();
字符串returnCode=cmd.Parameters[17-1].Value.ToString();
如果(返回代码=“确定”)
{
字符串sErg1=cmd.Parameters[3-1].Value.ToString();
realtimanswer.Add(sErg1);
字符串sErg2=cmd.Parameters[4-1].Value.ToString();
realtimanswer.Add(sErg2);
字符串sErg3=cmd.Parameters[5-1].Value.ToString();
realtimanswer.Add(sErg3);
字符串sErg4=cmd.Parameters[6-1].Value.ToString();
realtimanswer.Add(sErg4);
字符串sErg5=cmd.Parameters[7-1]。Value.ToString();
realtimanswer.Add(sErg5);
}
}
捕获(异常扩展)
{
cDebugLog.Log(“函数中的错误:GetData”+exp.Message+“StackTrace:+exp.StackTrace”);
connection.Close();
}
connection.Close();
返回realtimanswer;
}
}
我用这个密码叫它

void Button1_Click(object sender, EventArgs e)
    {
        busyRealTimeViewPage.IsBusy = true;
        try
        {
            string url = Application.Current.Host.Source.AbsoluteUri;
            url = url.Replace("/ClientBin/ICWeb.xap", "/DBService.svc");
            var proxy_GetRealTime_DBService = new DBServiceReference.DBServiceClient();
            proxy_GetRealTime_DBService.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);
            proxy_GetRealTime_DBService.GetDataCompleted += new EventHandler<DBServiceReference.GetDataCompletedEventArgs>(proxy_GetRealTime_DBService_GetDataCompleted);

            for (int i = 0; i < lstRealtime.Items.Count; i++)
            {
                if ((lstRealtim.ItemsSource as ObservableCollection<ListOfData>)[i].IsSelected == true)
                {
                    object[] w_toread = new object[5];
                    string sWrk = (lstMappedWorkgroups.ItemsSource as ObservableCollection<ListOfWorkgroups>)[i].Content;
                    w_toread[0] = sDat;
                    w_toread[1] = sDat + "_DE";
                    w_toread[2] = sDat + "_FR";

                    proxy_GetRealTime_DBService.GetDataAsync(w_toread[1].ToString(), "current", w_toread[1]);
                    proxy_GetRealTime_DBService.GetDataAsync(w_toread[2].ToString(), "current", w_toread[2]);
                }
            }
        }
        catch (Exception exp)
        {
            cDebugLog logger = new cDebugLog();
            logger.LogMessage("Error in Function: Button1_Click " + exp.Message + " StackTrace: " + exp.StackTrace);
        }
void按钮1\u单击(对象发送者,事件参数e)
{
busyRealTimeViewPage.IsBusy=true;
尝试
{
字符串url=Application.Current.Host.Source.AbsoluteUri;
url=url.Replace(“/ClientBin/ICWeb.xap”,“/DBService.svc”);
var proxy_GetRealTime_DBService=new dbservicecreference.DBServiceClient();
proxy\u GetRealTime\u DBService.Endpoint.Address=new System.ServiceModel.EndpointAddress(url);
proxy\u GetRealTime\u DBService.GetDataCompleted+=新事件处理程序(proxy\u GetRealTime\u DBService\u GetDataCompleted);
对于(int i=0;i
现在是它的其余部分

   void proxy_GetRealTime_DBService_GetDataCompleted(object sender, DBServiceReference.GetMarqueeDataCompletedEventArgs e)
    {
        try
        {
            string help = e.UserState.ToString();
            string sWrktoView = cStringFunctions.Left(e.UserState.ToString(), help.Length - 3);

            // string sWrktoView = (lstMappedWorkgroups.ItemsSource as ObservableCollection<ListOfWorkgroups>)[i].Content;
            string sWrktoViewDE = sWrktoView + "_DE";
            string sWrktoViewFR = sWrktoView + "_FR";

            if ((sWrktoViewDE == e.UserState.ToString()) || (sWrktoViewFR == e.UserState.ToString()))
            {
                if (!(toView.Any(wrk => wrk.Workgroup == sWrktoView)))
                {
                    if (sWrktoViewDE == e.UserState.ToString())
                    {
                        toView.Add(new RealtTime(sWrktoView, sWrktoViewDE, e.Result[0], e.Result[1], e.Result[2], e.Result[3], e.Result[4], e.Result[5], e.Result[6], e.Result[7], e.Result[8], e.Result[9], e.Result[10], e.Result[11], e.Result[12], e.Result[13], sWrktoViewFR, "", "", "", "", "", "", "", "", "", "", "", "", "", ""));
                    }
                    if (sWrktoViewFR == e.UserState.ToString())
                    {
                        toView.Add(new RealtTime(sWrktoView, sWrktoViewDE, "", "", "", "", "", "", "", "", "", "", "", "", "", "", sWrktoViewFR, e.Result[0], e.Result[1], e.Result[2], e.Result[3], e.Result[4], e.Result[5], e.Result[6], e.Result[7], e.Result[8], e.Result[9], e.Result[10], e.Result[11], e.Result[12], e.Result[13]));
                    }
                }
            }


            if (sWrktoViewFR == e.UserState.ToString())
            {
                var wrkFR = toView.FirstOrDefault(x => x.WorkgroupFR == sWrktoViewFR);
                if (wrkFR != null)
                {
                    wrkFR.WorkgroupFR = sWrktoViewFR;
                    wrkFR.erg1FR = e.Result[0];
                    wrkFR.erg2FR = e.Result[1];
                    wrkFR.erg3FR = e.Result[2];
                    wrkFR.erg4FR = e.Result[3];
                    wrkFR.erg5FR = e.Result[4];
                    // fill with other data
                }
            }

            if (sWrktoViewDE == e.UserState.ToString())
            {
                var wrkDE = toView.FirstOrDefault(x => x.WorkgroupDE == sWrktoViewDE);
                if (wrkDE != null)
                {
                    wrkDE.WorkgroupDE = sWrktoViewDE;
                    wrkDE.erg1DE = e.Result[0];
                    wrkDE.erg2DE = e.Result[1];
                    wrkDE.erg3DE = e.Result[2];
                    wrkDE.erg4DE = e.Result[3];
                    wrkDE.erg5DE = e.Result[4];
                    // fill with other Data

                }

            }

            dgridRealTimeView.ItemsSource = null;             
            dgridRealTimeView.ItemsSource = toView;
            busyRealTimeViewPage.IsBusy = false;
        }
        catch (Exception exp)
        {
            cDebugLog logger = new cDebugLog();
            logger.LogMessage("Methode: proxy_GetRealTime_DBService_GetDataCompleted: " + exp.Message + " StackTrace: " + exp.StackTrace);
        }

    }
void proxy\u GetRealTime\u DBService\u GetDataCompleted(对象发送方,DBServiceReference.GetMarqueeDataCompletedEventArgs e)
{
尝试
{
字符串help=e.UserState.ToString();
字符串sWrktoView=cStringFunctions.Left(e.UserState.ToString(),help.Length-3);
//字符串sWrktoView=
for (int i = 0; i < lstRealtime.Items.Count; i++)
public List<string> GetData(string[] sWert1, string[] sWert2)
{
}