gpt4 book ai didi

asp.net - WCF 最佳性能设置

转载 作者:行者123 更新时间:2023-12-02 16:58:14 26 4
gpt4 key购买 nike

您好,我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com