标签: throttling

大约10次左右的呼叫后,WCF停止响应(限制)

我有一个WCF服务和一个带有服务引用的应用程序,并且在应用程序中我有一个循环,并且在每次迭代中它都在调用这个wcf web服务中的方法.

问题是,在大约9次呼叫之后,它就会停止......如果你Pause按下VS的按钮,你会看到它停留在拨打电话的线路上.

等待一段时间后,抛出此TimeoutException:

在00:00:59.9970000之后等待回复时,请求通道超时.增加传递给Request的调用的超时值或增加Binding上的SendTimeout值.分配给此操作的时间可能是较长超时的一部分.


我对此进行了一些研究,发现了一些涉及在应用程序中编辑app.config的解决方案,以下是它的摘录:

<serviceBehaviors>
    <behavior name="ThrottlingIssue">
        <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" />
    </behavior>
</serviceBehaviors>
Run Code Online (Sandbox Code Playgroud)

.

<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
 maxArrayLength="2147483647" 
 maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
Run Code Online (Sandbox Code Playgroud)

然后,在我停止调试后,几分钟后,会弹出一条错误消息,告诉我发生了灾难性故障.

我该如何解决这个问题?当我使用普通的Web服务时,我没有遇到此问题.


供参考,以下是整体app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ThrottlingIssue">
                    <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IDBInteractionGateway" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
                    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="false" /> …
Run Code Online (Sandbox Code Playgroud)

c# wcf web-services throttling

39
推荐指数
1
解决办法
3万
查看次数

'ab'程序在收到大量请求后会冻结,为什么?

每当我使用'ab'对Web服务器进行基准测试时,它会在发送大量请求后冻结一段时间,但仅在20秒左右后继续.

考虑以下用Ruby编写的HTTP服务器模拟器:

require 'socket'

RESPONSE = "HTTP/1.1 200 OK\r\n" +
           "Connection: close\r\n" +
           "\r\n" +
           "\r\n"

buffer = ""
server = TCPServer.new("127.0.0.1", 3000)  # Create TCP server at port 3000.
server.listen(1024)                        # Set backlog to 1024.
while true
    client = server.accept             # Accept new client.
    client.write(RESPONSE)             # Write a stock "HTTP" response.
    client.close_write                 # Shutdown write part of the socket.
    client.read(nil, buffer)           # Read all data from the socket.  
    client.close                       # Close it.
end
Run Code Online (Sandbox Code Playgroud)

然后我按如下方式运行ab:

ab -n 45000 -c 10 …
Run Code Online (Sandbox Code Playgroud)

sockets debugging networking throttling apachebench

37
推荐指数
2
解决办法
7457
查看次数

WCF中服务太忙的错误

我在.Net WCF服务中间歇性地获得以下异常."位于http://MyServer/TestWCF/MyService.svc的HTTP服务太忙了."

我在这里错过了什么吗?

我使用基本的http绑定并启用了WCF限制.

<basicHttpBinding>
        <binding name="BasicHttpBinding_MyService" maxReceivedMessageSize="2147483647"
                 messageEncoding="Text" textEncoding="utf-16" sendTimeout="00:01:00" >
          <readerQuotas maxStringContentLength="2147483647" maxArrayLength="163840000"
                        maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="16384" />
        </binding>
Run Code Online (Sandbox Code Playgroud)

....

<behavior name="MyWCFServices.MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceThrottling
                    maxConcurrentCalls="16"
                    maxConcurrentInstances="2147483647"
                    maxConcurrentSessions="10"/>
        </behavior>
Run Code Online (Sandbox Code Playgroud)

限制有助于解决问题吗?另外,我可以知道高流量网站限制的推荐参数值吗?

wcf web-services throttling

29
推荐指数
2
解决办法
4万
查看次数

为Web请求实施速率限制算法的最佳方法是什么?

可能/部分重复:

我正在寻找为Web应用程序实现移动时间窗口速率限制算法的最佳方法,以减少垃圾邮件或暴力攻击.

使用的示例是"在过去5分钟内来自给定IP的最大失败登录尝试次数","最近N分钟内的最大((帖子/投票/等等)...").

我宁愿使用移动时间窗口算法,而不是每X分钟重新统计一次(比如twitter api).

这将是一个C#/ ASP.Net应用程序.

c# asp.net algorithm throttling rate-limiting

27
推荐指数
3
解决办法
2万
查看次数

使用WSHttpBinding时,WCF并发请求在服务器上堆积

我有一个WCF客户端/服务器应用程序,它使用WSHttpBinding通过HTTP进行通信.

服务器设置:使用标准WCF进行自托管ServiceHost.我的实际服务类别归结为:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, 
 InstanceContextMode = InstanceContextMode.PerSession, 
 UseSynchronizationContext = false)]
Run Code Online (Sandbox Code Playgroud)

客户端安装:使用visual-studio生成的客户端代理使用同步服务调用(proxy.call_server_method块直到服务器完全响应为止.)

场景:我有一个特定的方法调用,需要20秒才能在服务器上执行.客户端在一个单独的线程中调用此方法,因此它不会被阻止,并且ConcurrencyMode.MultipleWCF也应该在服务器上的单独线程中执行它.

这个理论得到以下事实的支持:当我配置我的应用程序使用时NetTcpBinding,一切正常.

问题:
如果我配置要使用的应用程序WSHttpBinding,则此长方法调用会导致http请求"备份".我已经通过检查我的日志和使用fiddler调试HTTP请求来验证这种行为.

例:

  • 客户端在后台线程上发起20秒长的请求
  • 客户端在前台线程上启动请求B和C.
  • 请求B和C被发送到服务器,在完成20秒长请求之前,服务器不处理它们

但有时候:

  • 在20秒请求返回之前,请求B和C 不会被发送(它们甚至不会出现在小提琴中)(这种情况很少见).
    • 注意:<add address="*" maxconnection="100"/>在客户端的app.config中进行设置会使此(似乎)停止发生.
  • 请求B被立即发送并接收响应,而请求C被保留,直到20秒完成(这是罕见的)

这是来自提琴手演示问题的时间表:(点击查看大图)

如您所见,请求都在服务器上备份.一旦20秒的请求完成,响应都会泛滥,但请注意,有些请求没有被阻止......

所以,问题:

  • 到底发生了什么事?为什么它可以正常使用NetTcpBinding而不能使用WSHttpBinding
  • 为什么行为不一致?
  • 我该怎么办才能修复它?

笔记:

  • 它没有锁定在服务器上.我已经设置了断点并使用了!syncblk它,它一直报告没有锁定.
  • 这不是我的线程(NetTcpBinding不应该工作)
  • 我已经<serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions="1000" />设置了服务器的app.config
  • 20秒的呼叫只是等待一个计时器,它不会破坏CPU或磁盘或网络
  • 我更喜欢一个不涉及重新设计应用程序以使用异步调用的解决方案......这是一大堆遗留代码,我真的不想搞乱我不理解的东西.

concurrency wcf multithreading throttling

26
推荐指数
2
解决办法
1万
查看次数

如何在React Hook中使用油门或反跳?

我正在尝试throttle在功能组件中使用lodash中的方法,例如:

const App = () => {
  const [value, setValue] = useState(0)
  useEffect(throttle(() => console.log(value), 1000), [value])
  return (
    <button onClick={() => setValue(value + 1)}>{value}</button>
  )
}
Run Code Online (Sandbox Code Playgroud)

由于内部方法useEffect在每次渲染时都会重新声明,因此限制效果不起作用。

有没有人有一个简单的解决方案?

throttling lodash reactjs react-hooks

24
推荐指数
8
解决办法
1万
查看次数

限制/限制GRequests中的HTTP请求速率

我正在使用GRequests和lxml 在Python 2.7.3中编写一个小脚本,这将允许我从各个网站收集一些可收集的卡片价格并进行比较.问题是其中一个网站限制了请求数量,如果我超过它,则发回HTTP错误429.

有没有办法在GRequestes中添加限制请求的数量,这样我就不会超过我指定的每秒请求数?另外 - 如果发生HTTP 429,我怎样才能使GRequestes在一段时间后重试?

在旁注 - 他们的限制是非常低的.每15秒就有8个请求.我在浏览器中多次破坏它只是刷新页面等待价格变化.

python throttling http rate-limiting python-requests

23
推荐指数
2
解决办法
1万
查看次数

处理亚马逊产品广告API节流限制

对于那些使用亚马逊产品广告API的人来说,你遇到了什么样的经验?据说,限制设定为每秒1个请求,这是你的经验吗?

我希望我的网站能够在全国范围内发展壮大,但我担心它能够在不受限制的情况下完成所有Amazon API请求.我们将所有响应缓存24小时,并限制在短时间内进行过多搜索的用户.

我应该担心吗?有什么建议?

api amazon throttling

22
推荐指数
4
解决办法
2万
查看次数

如何去除方法调用?

我正在尝试用a UISearchView来查询谷歌的地方.在这样做的时候,对于我的文本更改调用UISearchBar,我正在向google地方发出请求.问题是我宁愿将此调用去抖动,每250毫秒只请求一次,以避免不必要的网络流量.我不想自己写这个功能,但如果需要,我会.

我发现:https://gist.github.com/ShamylZakariya/54ee03228d955f458389,但我不太确定如何使用它:

func debounce( delay:NSTimeInterval, #queue:dispatch_queue_t, action: (()->()) ) -> ()->() {

    var lastFireTime:dispatch_time_t = 0
    let dispatchDelay = Int64(delay * Double(NSEC_PER_SEC))

    return {
        lastFireTime = dispatch_time(DISPATCH_TIME_NOW,0)
        dispatch_after(
            dispatch_time(
                DISPATCH_TIME_NOW,
                dispatchDelay
            ),
            queue) {
                let now = dispatch_time(DISPATCH_TIME_NOW,0)
                let when = dispatch_time(lastFireTime, dispatchDelay)
                if now >= when {
                    action()
                }
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用上述代码的一件事:

let searchDebounceInterval: NSTimeInterval = NSTimeInterval(0.25)

func findPlaces() {
    // ...
}

func searchBar(searchBar: UISearchBar!, textDidChange searchText: String!) { …
Run Code Online (Sandbox Code Playgroud)

throttling ios swift

22
推荐指数
7
解决办法
1万
查看次数

WCF服务限制

我在控制台应用程序中部署了WCF服务,并启用了BasicHTTPBinding和SSL.还设置了以下属性:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
Run Code Online (Sandbox Code Playgroud)

我还设置了限制行为

<serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentSessions="2147483647"
        maxConcurrentInstances="2147483647" />
Run Code Online (Sandbox Code Playgroud)

另一方面,我创建了一个测试客户端(用于负载测试),它同时启动多个客户端(多个线程)并在服务器上执行事务.一切似乎都很好,但在服务器上CPU利用率没有增加所以我添加了一些日志记录来查看服务器的并发调用数,发现它从未超过6.

我已经查看了两次以上的性能计数器记录代码,对我来说似乎很好.

所以我想问一下这种情况下的问题在哪里?我还没有指定任何种类的ContextMode或ConcurrencyMode.

这个帖子之后,我注意到,每当我开始测试客户端的另一个Intance我的并发服务器调用计数器增加至2一样,如果我运行仅1个实例的最大并发RCVD呼叫将被2,如果有两个实例相同的值变为4等等.一次处理的WCF呼叫数量是否有限制?

********3月17日添加********

今天我在运行服务器的同一台机器上运行了一个测试客户端(有50个并发用户)的另一个测试.这次我得到了我想要显示的确切结果(即服务器的最大并发呼叫数Rcvd = 50).

但我需要在其他机器上也这样做.有人可以帮我这个吗?

.net wcf throttling

18
推荐指数
2
解决办法
2万
查看次数