У меня есть служба WCF и приложение с Service Reference к нему, а с приложением у меня есть цикл и на каждой итерации он делает вызов метода в этом веб-сервисе wcf.
Проблема в том, что после примерно 9 звонков или просто она останавливается... и если вы нажмете кнопку Pause
на VS, вы увидите, что она застряла в строке, где она совершает вызов.
После некоторого времени ожидания этого TimeoutException выдается:
В течение ожидая ответа после 00: 00: 59,9970000. Увеличение таймаута значение, переданное на вызов для запроса или увеличьте значение SendTimeout на Связывание. Время, отведенное для этого возможно, была частью более длинный тайм-аут.
Я немного поработал над этим и нашел некоторые решения, связанные с редактированием app.config в приложении, и вот выдержки из него:
<serviceBehaviors>
<behavior name="ThrottlingIssue">
<serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" />
</behavior>
</serviceBehaviors>
.
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
Затем, после прекращения отладки, через пару минут появляется сообщение об ошибке, сообщающее мне, что произошел Катастрофический сбой.
Как я могу исправить эту проблему? У меня не было этой проблемы, когда я работал с обычной веб-службой.
Для справки, вот целая 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" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:28918/DBInteractionGateway.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDBInteractionGateway"
contract="DBInteraction.IDBInteractionGateway" name="WSHttpBinding_IDBInteractionGateway">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
[Обновить] Решение:
По-видимому, после каждого запроса вы должны Close
подключиться... Я закрываю соединение после каждого запроса, и оно работает как шарм.
Хотя то, что я до сих пор не могу понять, это то, что в моем app.config я установил мои maxConcurrentCalls и maxConcurrentSessions на 500, и все же я могу сделать только 10. У кого-нибудь есть ответ на этот вопрос? (возможно, у меня что-то не так в моем app.config выше)
Ответ на указанный вопрос (теперь пунктирный) заключается в том, что я редактировал клиент app.config
, а не файл конфигурации службы (web.config
)