WCF服务多个用户同时

时间:2014-04-24 16:15:37

标签: c# asp.net wcf concurrency multiple-instances

我将部署基于WCF的第一个应用程序,并希望了解最佳部署方式。这是我的建筑。请参阅附图。

我们有一个使用4.0框架编写的WCF,并有3个方法。前端ASP.NET网站(www.site.com)调用WCF来保存数据以及读取数据。在图中,method1保存为数据,方法2和3用于从SQL Server 2008 R2数据库中读取数据。

在我的ASP.Net网站中......

  1. 我正在调用Method1并关闭连接......就像这样.. ServiceClient client = new ServiceClient(); client.Method1(data to be saved) client.close();

  2. 我正在调用方法2和3,如下所示 ServiceClient client = new ServiceClient(); dropDown1list.datasource = client.Method2() dropDown2list.datasource = client.Method3() client.close();

  3. 多个用户可能同时使用该网站提交数据。考虑到这种架构。什么是部署WCF的最佳方式,以便它可以同时处理多个用户?我阅读了文章http://www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-andhttp://www.codeproject.com/Articles/86007/ways-to-do-WCF-instance-management-Per-call-Per

    我现在相信我需要将我的WCF服务作为

     [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple ,  InstanceContextMode = InstanceContextMode.PerCall )]
    public class Service : IService
    {
       public bool Method1(data to be saved)
        {
    
        }
    
        public List<string> Method2()
        {
    
        }
        public List<string> Method2()
        {
    
        }
    
    }
    

    我是对的吗?有什么建议 ?。 enter image description here

1 个答案:

答案 0 :(得分:1)

昨天刚回答了类似的问题。根据您的描述和图片,我不认为需要更改您的架构。如果您正在使用其中一个主要的WCF绑定(webHttpBinding,wsHttpBinding或BasicHTTPBinding),您部署的服务应该能够轻松处理数十个并发用户,同时保存和读取所有用户。

每个客户端请求都将生成自己的连接和Web服务对象,每个对象都可以与数据库同时进行通信,无论该请求是读取数据还是写入数据。当响应被发送回客户端时,只要您没有做出奇怪的事情,您的WCF服务就会销毁对象并为您清理内存。

我在过去两年中一直致力于WCF Web服务和工业规模。最近,我一直致力于负载测试/基准测试项目,该项目分散了数百个并发用户,每个用户都会使用加载到数据库中的XML工件来抨击我们的WCF测试服务器。我们设法每秒加载160个包(每个客户端大约110kb)。 WCF并不完美,但速度快,干净且尺寸非常好。

我的经验是您的数据库将成为您的瓶颈,而不是您的WCF Web服务。如果您的客户希望将此架构扩展到亚马逊规模的Web服务,那么您将引入F5负载均衡器并以此方式进行扩展。