This is one of those subjective community wiki questions (hope you don't mind), but recently I have been doing a lot of work on the WCF front and specifically hosting in IIS (not self hosting).
Is it just me, or does anyone have issues fine tuning timeout values. I'll start by mentioning the sheer number of timeouts you need to fine tune right off the bat.
Take a look at the following binding endpoint values that all in some way or another relate to a timeout:
- closeTimeout="00:01:00"
- openTimeout="00:01:00"
- receiveTimeout="00:10:00"
- sendTimeout="00:01:00"
- maxBufferSize="999"
- maxBufferPoolSize="524288"
- maxReceivedMessageSize="999"
- readerQuotas maxDepth="32"
- readerQuotas maxStringContentLength="8192"
- readerQuotas maxArrayLength="16384"
- readerQuotas maxBytesPerRead="4096"
- readerQuotas maxNameTableCharCount="16384"
These are just client side endpoint configuration values, we're not even getting started yet, now to get the service running in IIS, it is also required to setup the server side bindings, which offer the same level of complexity as the client side.
Once that is done, it is also essential to configure IIS otherwise during long calls to WCF services you will end up with your main thread being aborted.
IIS needs keep-alives disabled, the App Pool also comes with a vast array of timeout values, App Pool, this is a detailed subject in its own right. Besides this there are around another 7 timeout values that need to be specifically fine tuned, otherwise expect your complex WCF calls to fail.
Excuse me, but does anyone else smell a rat?
My understanding is that essentially (most) of these timeout values exist because of trust issues. By trust, I mean "We don't trust the services do do what they are supposed to do in a reasonable amount of time". Every aspect of SOA reliable communication is distrusted up front, and because of this, it seems we need vast arrays of catch nets (timeout values) in place to ensure some degree of manageability. Lets face it, if we trusted systems to give a response in a timely manner, why would be need to set a timeout value?
The issue I have with all this is that frankly its back to front, what if the 5 systems I have in my application are generally trustful and usually do give timely responses. I'm frustrated that I will still need to go through the lengthy process of defining these borders because OOB, WCF/IIS hosting fails.
I've observed that WCF technology is hypocritical, during web casts and marketing presentations, it is usually always mentioned that WCF allows better abstraction from the implementation, allowing developers to more easily write and deploy and by "simply"defining endpoints are able to concentrate on the business logic, and less on the underlining architecture. I have found in practice nothing can be further from the truth. With WCF you need to be deeply into the details of how your service operates, and you need to manually fine tune a great deal, unlike in ASMX services where usually they deployed without much fuss, and only needed some IIS fine tuning, rarely even.
So the question I pose is: Is it just me or do any of you share the same frustrations and observations? All comments welcome!