首页 新闻 会员 周边

WCF服务并发

0
悬赏园豆:50 [已解决问题] 解决于 2012-11-27 09:24
   [ServiceContract]
     [XmlSerializerFormat]
     public interface IEtermavh
     {
         [OperationContract]
         System.Xml.XmlDocument GetXml(string type, string citys, string flydate, string flytime, string aircomp, out string error);
}


     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Etermavh”。
     [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)]
     public class Etermavh : IEtermavh
     {
  public System.Xml.XmlDocument GetXml(string type, string citys, string flydate, string flytime, string airComp, out string error)
         {
             Comm.log(string.Format("进入。。type:{0}", type), LogType.WcfLogin);
             error = null;
             System.Threading.Thread.Sleep(10000);
      }
  }
//WCF服务
//客户端调用wcf服务,wcf服务已开启


   protected void Page_Load(object sender, EventArgs e)
     {
         eterm.EtermavhClient client = new eterm.EtermavhClient();
         string error;
         client.GetXml("", "", "", "", "", out error);
     }

客户端开多个页面去刷新调用wcf服务的方法,在日志里记录的:

2012/11/21 18:20:31 进入。。type:

2012/11/21 18:20:42 进入。。type:

2012/11/21 18:20:53 进入。。type:

2012/11/21 18:21:05 进入。。type:

是排着队....调用wcf方法的,怎么才能让各个调用在wcf服务端能并发处理?

在web中调用wcf服务,现在用控制台什么的就没这个问题,就是web调用才有这样的现象,在web中的不同页面调用也没这种现象,同时打开多个同一页面就阻塞了.....

异步也不行,也是上面的情况 
 string val;
    protected void Page_Load(object sender, EventArgs e)
    {
        Service1Client client = new Service1Client();
        IAsyncResult result = client.BeginGetData(22, back, client);
        while (!result.IsCompleted)
        {

        }
        Response.Write(val);
        //eterm.EtermavhClient client = new eterm.EtermavhClient();
        //string error;
        //client.GetXml("", "", "", "", "", out error);
    }
    private void back(IAsyncResult result)
    {
        Service1Client client = result.AsyncState as Service1Client;
        val = client.EndGetData(result);

    }
Rookier的主页 Rookier | 小虾三级 | 园豆:652
提问于:2012-11-21 18:23
< >
分享
最佳答案
0

ServiceBehavior(InstancesContextMode=InstancesContextMode.PerCall

这个是默认值

不设置,就是这个值

你光是通过时间就能判断是一个一个的处理的?而不是并发?

收获园豆:10
chenping2008 | 大侠五级 |园豆:9836 | 2012-11-21 21:21

我同时刷新多个页面(当然切换页面可能有个1,2秒),这些客户端页面都调用这个wcf服务的方法,生成的日志就是这样的.

Rookier | 园豆:652 (小虾三级) | 2012-11-22 09:16

这个wcf服务方法是一个耗时的操作,难道每次调用都是需要前一个处理完成才能处理下一个调用请求?这不是并发吧?

Rookier | 园豆:652 (小虾三级) | 2012-11-22 09:18

我觉得这应该是一个很简单的问题...但是没搞过wcf,wcf对并发这个应该很好的支持吧,不然就太失败了..,兄弟知道怎么搞不?

Rookier | 园豆:652 (小虾三级) | 2012-11-22 09:19
其他回答(2)
0

能把你配置信息发出来看下吗?

收获园豆:20
heqichang | 园豆:275 (菜鸟二级) | 2012-11-21 18:42
<system.serviceModel>
         <bindings>
             <netTcpBinding>
                 <binding
  closeTimeout="00:05:00" sendTimeout="00:05:00">
                 </binding>
             </netTcpBinding>
         </bindings>
         <services>
             <service name="JBEwcf.Etermavh"   behaviorConfiguration="CalculatorServiceBehavior">
                 <host>
                     <baseAddresses >
                         <add baseAddress="http://localhost:8864"/>
                     </baseAddresses>
                 </host>
             </service>
         </services>
         <!--定义CalculatorServiceBehavior的行为-->
         <behaviors>
             <serviceBehaviors>
                 <behavior name="CalculatorServiceBehavior">
                     <serviceMetadata httpGetEnabled="true"/>
                     <serviceDebug includeExceptionDetailInFaults="false"/>
                 </behavior>
 
             </serviceBehaviors>
         </behaviors>
     </system.serviceModel> 服务端的



<system.serviceModel>
     <bindings>
       <basicHttpBinding>
         <binding name="BasicHttpBinding_IEtermavh"/>
       </basicHttpBinding>
     </bindings>
     <client>
       <endpoint address="http://localhost:8864/" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IEtermavh" contract="eterm.IEtermavh" name="BasicHttpBinding_IEtermavh"/>
     </client>
   </system.serviceModel>客户端的
支持(0) 反对(0) Rookier | 园豆:652 (小虾三级) | 2012-11-21 18:56

@Rookier: 你是在同一个客户端发起连接?你试试在服务上添加 [ServiceBehavior(InstancesContextMode=InstancesContextMode.PerCall)]

支持(0) 反对(0) heqichang | 园豆:275 (菜鸟二级) | 2012-11-21 19:11
0
收获园豆:20
魂殇 | 园豆:154 (初学一级) | 2012-11-22 14:50

看过了...

支持(0) 反对(0) Rookier | 园豆:652 (小虾三级) | 2012-11-22 14:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册