The documentation around this topic is poor. I use WCF services with NetTcpBinding hosted in Windows service. The problem is that a session is dropped when it is inactive for some time. What I need is the session which is always alive. Is WCF reliable session something that can help? Or I can just play with timeout settings?
WCF reliable sessions is an implementation of SOAP reliable messaging as defined by the WS-ReliableMessaging protocol. WCF SOAP reliable messaging provides an end-to-end reliable session between two endpoints, regardless of the number or type of intermediaries that separate the messaging endpoints.
When both the client and the service implement WS-ReliableMessaging, they can establish a back and forth communication that helps ensure that calls and responses are received. Reliable messaging works over HTTP, TCP, and Named Pipe bindings. Reliable messaging works a little like TCP (the transport part of TCP/IP).
The configurable property MaxTransferWindowSize indicates how many messages the transfer window can hold. On the sender, this indicates how many messages the transfer window can hold while waiting for acknowledgements; on the receiver, it indicates how many messages to buffer for the service.
No, a reliable session will time out just like any other session, too. The main question really is: why on earth do you want your sessions to be "endless" ?? If you really need this, you need to crank up the timeouts on the session.
The point of a reliable session is that the caller will know about any messages that are lost. Contrary to popular belief, the reliable session cannot guarantee delivery of a message - but if a message can't be delivered, at least the caller will know about it.
Check out some of these resources for more background info:
if you dont use the channel, it will close himself after a while. you can change the default timeout (which is 10 min) from the binding.
NetTcpBinding binding = new NetTcpBinding(); binding.ReceiveTimeout = TimeSpan.MaxValue; binding.ReliableSession.InactivityTimeout = TimeSpan.MaxValue;
read more at MSDN
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With