WCF (Windows communication foundation) is the service layer foundation and the base of SOA in Microsoft dot net, what will happen when you have a huge WCF service consisting of 5000 operation contract. This is not unreal at all, if you design a service bus for a large intranet application, where 1000 employee using your application and doing day to day operation and your WCF service hits per second is about 2000. You can do so many thing to optimize it, first of all you can cluster the service and then apply load balance. So horizontal scaling is a solution.
Now if you are given a task to optimize the operation and each time you need to look at the service you have to find it in a large class where you have about 5000 operation contract. How developers will maintain this huge code base?
Fortunately we have few solutions to that problem
Today we are going to see 1st of many solution
split your *.svc.cs file
This does not help in optimization of the service rather managing the file and the codebase. First of all I would split the svc file in to several pieces. Each will contain in about 100 methods, still we would have 20 files for the svc file, its kind of sounds different but, would help managing 2000 methods, each file will contain domain specific methods for the service.
How we do it?
We will add class with almost same name as the service, for instance if we have a WCF service named “myservice.svc” then the code behind file is “myservice.svc.cs”. Off Course its not necessary to have svc.cs file with the wcf service we can have only the declaration.
Below a code example is given,This is how a real world service which is out of refactoring and maintain for a while looks like.
Figure: Log Class of 2000 method
In above screenshot If you carefully look at the scrollbar of the method dropdown of the visual studio, you will have an idea how much its doing.
So now we need to optimize this in perspective of code management. As we already discussed the technique. we will split this in to several pieces, luckily we have a partial class concept in c#, so we would split this in to several pieces according to class responsibility domain.
Naming convention for the partial class. “myservice.[responsibilityDomain].svc.cs” that’s the filename of the class. In practical case I have named on of my partial class as “ReliantDataConnect.CandidateOffer.svc.cs” I have moved all the methods related to CandidateOffer in this file.
Now Lets say we have added another partial class file name “ReliantDataConnect.Resource.svc.cs” using the following wizard window.
Figure: Add a new class
And after moving the related methods in the partial class the partial class may look like below screen shot.
Now problem is the partial class will be visible in solution explorer as a isolated file rather part of the WCF Service. Below how it looks like after adding the file.
Now if we can add this file as a dependent file of the ReliantDataConnect.svc file this will save us form watching isolated file, and make a combined file. Here is how we do it.
Make a file dependent on another file in visual studio
First of all we have to open the project file in note pad or text pad or note pad ++ which ever you like. Then find the file name that we added “ReliantDataConnect.Resource.svc.cs”, finally add DependentUpon Child node and specify the file name in our case its “RelaintDataConnect.svc” Now saved the file. Close it. If visual studio is open it should already warn you that file is been modified outside and reload is necessary. Reload to proceed.
After reload you will see that the file is now part of svc file.
Cool right?. Well for now you can go and browse other blog, I will get busy with creating 20 more class file for this project. Until next time.
Masudur Rahman is out.