У меня возникла проблема с таймаутом при запуске распределенной транзакции по привязке WCF net.tcp. Сделка всегда заканчивается через ровно 10 минут. Я думаю, что я установил все таймауты, которые я знаю, с более высокой стоимостью, чем это (15 минут), но я, вероятно, что-то пропускаю. Я вызываю службу WCF net.tcp, размещенную в IIS7.5.Проблема с таймаутом в распределенной транзакции по привязке WCF net.tcp
На стороне службы, у меня есть следующий обязательный конфиг:
<binding name="OrgSyncService_NetTcpBinding" portSharingEnabled="true"
transactionFlow="true" maxReceivedMessageSize="1048576000"
openTimeout="00:01:00" receiveTimeout="00:15:00" sendTimeout="00:15:00">
<security mode="Transport">
<transport clientCredentialType="Windows"
protectionLevel="EncryptAndSign"/>
</security>
<readerQuotas maxStringContentLength="1073741824" />
<reliableSession enabled="true" inactivityTimeout="00:15:00" />
</binding>
Как вы можете видеть, все соответствующие интервалы времени 15 минут. На стороне клиента, связывающая конфигурация выглядит следующим образом:
<binding name="NetTcpBinding_OrgSyncService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:15:00" sendTimeout="00:15:00"
transactionFlow="true" transferMode="Buffered"
transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10"
maxBufferPoolSize="524288" maxConnections="10"
maxReceivedMessageSize="1048576000">
<readerQuotas maxDepth="32" maxStringContentLength="1073741824"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:15:00" enabled="true" />
<security mode="Transport">
<transport clientCredentialType="Windows"
protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
Опять же, все таймауты, что я в курсе устанавливаются на 15 минут. И, наконец, что код начинает транзакцию:
var options = new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadCommitted,
Timeout = TimeSpan.FromMinutes(15)
};
using (var ts = new TransactionScope(TransactionScopeOption.Required, options))
{
// Do transactional work.
// Call web service.
service.HandleSourceChanges(listOfChanges);
ts.Complete();
}
Метод веб-сервис сам по себе имеет следующую подпись:
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void HandleSourceChanges(IEnumerable<OrgSyncSourceChange> sourceChanges)
{ /* Handle changes and store them in the database. */ }
Но, как я уже сказал, ровно через 10 минут после начала транзакции, это время ожидания , Я не уверен, что сама транзакция истекает. Это может быть еще один компонент, который приводит к тайм-ауту транзакции.
Что мне не хватает? Есть ли настройка IIS, о которой я не знаю? Настройка MSDTC?
Странно, что это переопределяет значение в вашей конфигурации. Один, чтобы помнить – 2010-12-06 13:38:51