我将部署基于WCF的第一个应用程序,并希望了解最佳部署方式。这是我的建筑。请参阅附图。
我们有一个使用4.0框架编写的WCF,并有3个方法。前端ASP.NET网站(www.site.com)调用WCF来保存数据以及读取数据。在图中,method1保存为数据,方法2和3用于从SQL Server 2008 R2数据库中读取数据。
在我的ASP.Net网站中......
我正在调用Method1并关闭连接......就像这样..
ServiceClient client = new ServiceClient();
client.Method1(data to be saved)
client.close();
我正在调用方法2和3,如下所示
ServiceClient client = new ServiceClient();
dropDown1list.datasource = client.Method2()
dropDown2list.datasource = client.Method3()
client.close();
多个用户可能同时使用该网站提交数据。考虑到这种架构。什么是部署WCF的最佳方式,以便它可以同时处理多个用户?我阅读了文章http://www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-and和http://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()
{
}
}
我是对的吗?有什么建议 ?。
答案 0 :(得分:1)
昨天刚回答了类似的问题。根据您的描述和图片,我不认为需要更改您的架构。如果您正在使用其中一个主要的WCF绑定(webHttpBinding,wsHttpBinding或BasicHTTPBinding),您部署的服务应该能够轻松处理数十个并发用户,同时保存和读取所有用户。
每个客户端请求都将生成自己的连接和Web服务对象,每个对象都可以与数据库同时进行通信,无论该请求是读取数据还是写入数据。当响应被发送回客户端时,只要您没有做出奇怪的事情,您的WCF服务就会销毁对象并为您清理内存。
我在过去两年中一直致力于WCF Web服务和工业规模。最近,我一直致力于负载测试/基准测试项目,该项目分散了数百个并发用户,每个用户都会使用加载到数据库中的XML工件来抨击我们的WCF测试服务器。我们设法每秒加载160个包(每个客户端大约110kb)。 WCF并不完美,但速度快,干净且尺寸非常好。
我的经验是您的数据库将成为您的瓶颈,而不是您的WCF Web服务。如果您的客户希望将此架构扩展到亚马逊规模的Web服务,那么您将引入F5负载均衡器并以此方式进行扩展。