0

In netTcpBinding of WCF, should receiveTimeout be less than inactivityTimeout. I was having a Communication channel aborted error so I change the receiveTimeout to 24 hour.I now got this error

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
    <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
        <EventID>524298</EventID>
        <Type>3</Type>
        <SubType Name="Information">0</SubType>
        <Level>8</Level>
        <TimeCreated SystemTime="2015-05-01T18:53:48.2971907Z" />
        <Source Name="System.ServiceModel" />
        <Correlation ActivityID="{a39a898a-579d-4e50-9bdb-82b5b57b65f9}" />
        <Execution ProcessName="MyServiceHosting" ProcessID="3068" ThreadID="36" />
        <Channel />
        <Computer>SERVER</Computer>
    </System>
    <ApplicationData>
        <TraceData>
            <DataItem>
                <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
                    <TraceIdentifier>http://msdn.microsoft.com/en-US/library/System.ServiceModel.CommunicationObjectFaultReason.aspx</TraceIdentifier>
                    <Description>CommunicationObject faulted due to exception.</Description>
                    <AppDomain>KaraokeServiceHosting.exe</AppDomain>
                    <ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/MessageTraceRecord"/>
                    <Exception>
                        <ExceptionType>System.ServiceModel.CommunicationException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
                        <Message>The inactivity timeout of (00:05:30) has been exceeded.</Message>
                        <StackTrace>   at System.ServiceModel.Channels.CommunicationObject.Fault(Exception exception)
   at System.ServiceModel.Channels.ChannelReliableSession.OnLocalFault(Exception e, Message faultMessage, RequestContext context)
   at System.ServiceModel.Channels.ChannelReliableSession.OnLocalFault(Exception e, WsrmFault fault, RequestContext context)
   at System.ServiceModel.Channels.ChannelReliableSession.OnInactivityElapsed(Object state)
   at System.ServiceModel.Channels.InterruptibleTimer.OnTimerElapsed()
   at System.ServiceModel.Channels.InterruptibleTimer.OnTimerElapsed(Object state)
   at System.Runtime.ActionItem.DefaultActionItem.TraceAndInvoke()
   at System.Runtime.ActionItem.DefaultActionItem.Invoke()
   at System.Runtime.ActionItem.CallbackHelper.InvokeWithoutContext(Object state)
   at System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
   at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)
   at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
                        </StackTrace>
                        <ExceptionString>System.ServiceModel.CommunicationException: The inactivity timeout of (00:05:30) has been exceeded.</ExceptionString>
                    </Exception>
                </TraceRecord>
            </DataItem>
        </TraceData>
    </ApplicationData>
</E2ETraceEvent>

My Binding is

 <netTcpBinding>
    <binding name="myBinding" receiveTimeout="24:0:0" maxReceivedMessageSize="999999999" maxBufferSize="999999999" maxBufferPoolSize="999999999">
      <reliableSession enabled="true" inactivityTimeout="0:5:30"/>     
      <security mode="None"/>
    </binding>
  </netTcpBinding>

I suspect the error occur since when the callback is send to a client it wait until 24 hour for response while the communication channel become faulted when it reached the 5 and half minute as such before in the binding. Is my assumption correct? Should recieveTimeout be always less than or equal to inactivityTimeout?

Scott Chamberlain
  • 124,994
  • 33
  • 282
  • 431
Sun Maung Oo
  • 183
  • 2
  • 11

1 Answers1

1

I suppose that the proper answer is in the response to the following question: WCF - Binding.ReceiveTimeout & ReliableSession.InactivityTimeout

Basically- from that answer - the receiveTimeout should always be higher or the same as inactivityTimeout

Community
  • 1
  • 1
Piotr Piotr
  • 213
  • 2
  • 7