I am trying to determine the proxy overhead of ARR v1.0 RTM in a binary HTTP streaming scenario. I have developed a very simple test WCF application that takes a GET request via a URI template for a number of bytes and streams the requested number of bytes back to the client. The test environment is also simple. 1 Web Server running the WCF Service, 1 Web Server running ARR, and a client all connected on a dedicated 1 GB switch.
The ARR Configuration is simple
1 Rewrite Rule
<globalRules>
<rule name="WcfWebFarmRoute" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="WcfPerfTest/*" />
<conditions>
</conditions>
<action type="Rewrite" url="http://WcfWebFarm/{R:0}" />
</rule>
</globalRules>
</rewrite>
1 WebFarm
<webFarms>
<webFarm name="WcfWebFarm" enabled="true">
<server address="wcfhost.test.com" enabled="true">
<applicationRequestRouting httpPort="80" />
</server>
<applicationRequestRouting>
<protocol minResponseBuffer="0" />
</applicationRequestRouting>
</webFarm>
<applicationRequestRouting>
<hostAffinityProviderList>
<add name="Microsoft.Web.Arr.HostNameRoundRobin" />
<add name="Microsoft.Web.Arr.HostNameMemory" />
</hostAffinityProviderList>
</applicationRequestRouting>
</webFarms>
I have tried to follow the advice detailed in the posts below for streaming support.
http://forums.iis.net/p/1154087/1888966.aspx
http://forums.iis.net/p/1154087/1888966.aspx
The IIS Configuration UI for the proxy does not allow 0 as a valid value, so the applicationHost file was edited manually. I have tried setting both responseBufferLimit="0" as well as minResponseBuffer="0". My test results have not show a difference.
The client connecting through the ARR proxy to the wcf host is able to send 1000 requests for 512 KBytes in 46359.8026147287 ms, 11044 KB/sec
The same client connecting directly to the WCF host (no ARR) is able to send 1000 requests for 512 KBytes in 6667.43178952004 ms, 76791 KB/sec
Is there any settings/options to minimize the overhead I am experiencing. It appears that the streaming option minResponseBuffer="0" does not seem to work. The overhead I am experiencing seems too high for this simple test scenario. I cannot find documentation on how ARR is implemented to understand the internal behaviour of the ARR proxy. Is there some instrumentation available to understand where the overhead is occuring in the request/response pipeline?
Any help would be much appreciated.