views:

314

answers:

0

I have a WCF service used mainly for managing documents in a repository. I used the chunking channel sample from MS so that I could upload/download huge files. Now I implemented reliable session with the service and I am seeing some strange behaviors. Here are the timeout values I am using.

        this.SendTimeout = new TimeSpan(0,10,0);
        this.OpenTimeout = new TimeSpan(0, 1, 0);
        this.CloseTimeout = new TimeSpan(0, 1, 0);
        this.ReceiveTimeout = new TimeSpan(0,10, 0);

        reliableBe.InactivityTimeout = new TimeSpan(0,2,0);

I have the following issues.
1. If the Service is not up & running, the clients are not get disconnected after OpenTimeout.

I tried it with my test client.

Scenario 1: Without Reliable Session: I get the following exception: Could not connect to net.tcp://localhost:8788/MediaManagementService/ep1. The connection attempt lasted for a time span of 00:00:00.9848790. TCP error code 10061: No connection could be made because the target machine actively refused it 127.0.0.1:8788

This is the correct behavior as I have given the OpenTimeout as 1 sec.

Scenario 2: With ReliableSession: I get the same exception: Could not connect to net.tcp://localhost:8788/MediaManagementService/ep1. The connection attempt lasted for a time span of 00:00:00.9692460. TCP error code 10061: No connection could be made because the target machine actively refused it 127.0.0.1:8788.

But this message comes after around 10 mintes . (I believe after SendTimeout) So here I just have enabled the reliable session and now it looks like the OpenTimeout = SendTimeout for the client. Is this desired behavior?

2: Issue while uploading huge files with ReliableSession: The general rule is that you have to set a huge value for the maxReceivedMessageSize, SendTimeout and ReceiveTimeout. But in the case of Chunking channel, the max received message size doesn't matter as the data is sent in chunks. So I set a huge value for Send and ReceiveTimeout : say 10 hours. Now the upload is going fine, but it has a side effect that, even if the Service is not up, it takes 10 hours to timeout the client connection due to the behavior mentioned in (1).

Please let me know your thoughts on this behavior.