Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
C#
branch: master
Failed to load latest commit information.
Mike.AsyncWcf.Client.Tests default should be to call 'hello'
Mike.AsyncWcf.Client
Mike.AsyncWcf.Core Refactored to use SimpleAsyncResult
Mike.AsyncWcf.Proxy Refactored to use SimpleAsyncResult
Mike.AsyncWcf.Server
References Initial project files
.gitignore gitignore file
Mike.AsyncWcf.sln blog post URL
README.txt

README.txt

Async WCF
=========

This is a demonstration of how to build an asynchronous WCF service. Please read this post for background:
http://mikehadlow.blogspot.com/2011/03/7000-concurrent-connections-with.html

How to use it:
--------------

1. Build the solution
2. Start Mike.AsyncWcf.Server <- a simple timer service
3. Start Mike.AsyncWcf.Proxy  <- a simple proxy that passes calls onto the timer service

Mike.AsyncWcf.Server is a simple async WCF service that simply waits 10 seconds before returning. 
To try this out open this test class:

Mike.AsyncWcf.Client.Tests.RunRawHttpClient

change this line of code so that it calls your instance of Mike.AsyncWcf.Server:
private static readonly Uri serviceUri = new Uri("http://<your server>:8123/hello");

... and run the 'Run' test method with your favorite test running (TestDriven.NET FTW :)

You should see output something like this:

Starting test...
Completed: 0 	Faulted: 0 	In Progress: 763
Completed: 0 	Faulted: 0 	In Progress: 1713

...

Completed: 19,532 	Faulted: 0 	In Progress: 468
Completed: 19,976 	Faulted: 0 	In Progress: 24
Completed All 20,000
Faulted 0
Elapsed ms 39,661
Max concurrency 7,097
Calls per second 504
Avergate call duration ms 10,092

To try out the proxy:
---------------------

in 
Mike.AsyncWcf.Client.Tests.RunRawHttpClient
change this line of code so that it calls your instance of Mike.AsyncWcf.Proxy:
private static readonly Uri serviceUri = new Uri("http://<your server>:8123/proxy");

in 
Mike.AsyncWcf.Proxy.CustomerProxyService
change this line of code so that it calls your instance of Mike.AsyncWcf.Server
private readonly Uri serviceUri = new Uri("http://<your server>:8123/hello");

Execute the test method as before. Play with these two constants to see how far you can push it:
private const int iterations = 20000;			<- start low and work upwards
private const int intervalMilliseconds = 1;     <- start with a high value (100) and work downwards
Something went wrong with that request. Please try again.