asp.net - WCF 最佳性能设置

标签 asp.net wcf web-services

您好,我正在使用 WCF 创建一个 API。我的问题可以分为两个独立的问题

1)我有很多电话,例如我有与客户、产品、订单、员工有关的电话。

我的问题是所有这些都应该进入一个公共(public)接口(interface)类,例如

public interface IRestService
public class RestService : IRestService

或者我应该为每次通话准备一个,例如

public interface ICustomer
public class Customer : ICustomer

public interface IProducts
public class Products: IProducts

2) 如果您有一个 API,将被数以万计的用户和数千个用户同时访问,您将如何设置,您的 Web 配置设置是什么,例如在限制方面。另外,您将为 InstanceContextModeConcurrencyMode 设置什么设置。最后,考虑到网站和手机都可以访问 api,它会是哪种类型的绑定(bind)。

最佳答案

为了良好的实践,我会将 API 分解为单独的接口(interface),以便您将来可以选择将它们拆分为单独的实现。您仍然可以只让一个服务类实现所有接口(interface),如下所示:

public class RestService : ICustomer, IProducts, IOrders

但是,听起来好像您可能希望将它们单独实现。

在并发设置方面,问问自己每次调用需要使用哪些资源。如果您的服务类的构造函数可以编写而无需任何冗长的启动,那么请使用 PerCall。如果您需要初始化昂贵的资源,那么我建议使用 InstanceContextMode.Single 和 ConcurrencytMode.Multiple 并确保编写线程安全的代码。例如:在使用任何类属性或其他共享资源之前,请确保对它们进行 lock() 操作。

不过,数据库连接不会被视为“初始化成本较高”,因为 ADO 将为您进行连接池并消除该开销。

正如拉迪斯拉夫提到的,您的限制设置将通过测试来揭示。您想要对您的服务进行压力测试,并使用结果来了解需要多少台机器来为您的预期负载提供服务。然后,您将需要一个专用的负载均衡器来以循环方式路由请求,或者检查每个服务器的运行状况。负载均衡器可以设置为获取“systemhealth.asp”页面并检查结果。如果您返回“OK”,则该计算机将保留在池中,或者如果超时或返回任何其他状态,则可以暂时从池中删除。

您的绑定(bind)需要是 REST 的 WebHTTPBinding。例如,BasicHTTPBinding 适用于 SOAP 接口(interface),不支持 [WebGet]。

如果它不必是 REST 服务,那么您可以通过使用 NetTcpBinding 获得更高的性能。

关于asp.net - WCF 最佳性能设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4767588/

相关文章:

c# - Rails 和 ASP.NET 单点登录

javascript - 在 asp.net mvc 中对 Controller 进行简单的 Ajax 调用

web-services - Delphi-7 WSDL 导入器错误 "The following types, referred to in the WSDL document are not being represented..."

c# - mysql问题。异常(exception)

asp.net - .NET MVC 还是普通的 ASP.NET?

c# - WCF,找不到契约(Contract)名称 'IMetadataExchange'

c# - 我可以强制 svcutil.exe 为 WCF 服务生成数据协定吗?

c# - 当 WCF 服务运行批处理文件时,XCopy 或 MOVE 不起作用。为什么?

ruby - Rest Client 是否支持 NTLM Auth?

java - WebServices 客户端 - 动态代理与使用 wconsume 创建的 stub