I have a pretty simple WCF service that does one-way file synchronization for a bunch of smart clients. I noticed that when a network or service is interrupted during a conversation, the client stops communicating with the server until the entire application is restarted.
The service works with BasicHttpBindingand is hosted on IIS6 (.svc page) using transferMode="Streamed"and messageEncoding="Mtom". The service is configured to use the default InstanceContextMode instance (I think it is for the call?) And ConcurrencyMode = Single. It uses the default throttling behavior, but I'm in an isolated test environment that no one gets into.
Clients are Windows services. I use this ServiceProxyHelper to ensure that the connections Close()' d or Abort()'d are correct when Dispose()' d, although there are no sessions, so I don't think it even matters. When an error occurs, the Client object is deleted and then goes out of scope. After an exception is detected, the service waits for a bit, then creates a new client object and tries again. Therefore, it should recover from the failure, but for some reason, all subsequent calls to the service do not work.
I can reliably reproduce this by running the client, allowing it to transfer multiple files, and then iisresetting the server. First, the client usually displays the โService iso Busyโ error (which maps to the IIS 503 error that you receive when you restart the application). After that, all subsequent service timeout calls. As far as I can tell, calls are not even made by the client. I have tracing enabled, and I see: a timeout error, followed by the warning โFailed to send a request message via HTTP,โ followed by another timeout error.
, Fiddler ( 8888) - app.config, . - Fiddler - , WCF .
?
2009-10-30 8:54 PM: : InstanceContextMode = Single ConcurrencyMode = Multiple. .