none
在应用中影响wcf并发的性能有哪些因素? RRS feed

  • 问题

  • 生产问题:

    wcf响应很慢,压力大的时候,客户端发起要一段时间才能得到结果。

    应用程序包含:wcf服务persession+multiple,4个线程,一个dll,线程一个300ms执行一次,使用托管线程池,一个1s一次,其他10s以上。dll为一个独立应用,三个线程。

    以前4个线程跟dll是独立应用,现在是全部整合在一起。

    该如何入手去寻找原因。cpu使用率正常,求解.

    2010年11月24日 2:36

全部回复

  • 检查一下线程之间是否有资源竞争,或者访问了共享的同步资源?

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2010年11月24日 3:06
    版主
  •  

    线程因为是从以前独立应用中剥离出来的,所以4个没有交集,不过都是与db进行交互。

    问了下,客户端调用服务端接口跟db进行交互很快,但是回调很慢。

    回调接口定义如下:

    服务端:

     

       ITaskCallback callback
            {
                get { return OperationContext.Current.GetCallbackChannel<ITaskCallback>(); }
            }

     

      if (callback.SendTask(task))
                    {
                        Log.addLog("发送任务成功" + task.ID, task.OperID, 1);
                    }

    客户端:

      [CallbackBehavior(UseSynchronizationContext = false)]
        public class CallbackHandler : ITasksServiceCallback
        {
            public bool SendTask(InputTest.Test.Task task)
            {
                try
                {

                    if (Form1.nBaseID != task.BaseID)
                    {
                        Business.addLog("BaseID不相等:" + task.ID + "  Form1.nBaseID=" + Form1.nBaseID.ToString() + " task.BaseID=" + task.BaseID.ToString(),1,0);
                       // Form1.getTaskEvent.Set();
                        return false;
                    }
                    else
                    {
                        Form1.m_NewTask = task;
                        Business.addLog("引擎送来任务:" + task.ID + "  nBaseID=" + task.BaseID.ToString(), 1, 0);
                        Form1.getTaskEvent.Set();
                        return true;
                    }
     
                }
                catch (Exception e)
                {
                    Business.addLog("回调异常:" + e.Message, 1, 0);
                    return false;
                }

             
            }
        } 

     

    WCF服务端框架一个主要的任务是将接收到的服务调用请求分发给激活的服务实例,调用相应的服务操作并返回执行结果。

    是否是因为他用的是当前线程的上下文的实例,但是在服务端有多个线程,只有等到轮询执行到此线程的时候他才能回调,导致他时间慢?

     

    2010年11月24日 3:39