In this article, we will learn:
- Why to build WCF Service?
- Know the Required Tools
- Best Practices
- WCF Designs
- Exception Handlings
- Proxy Management
Why to build WCF Service?
Build WCF service if you have a good reason for it:
- Business logic in perimeter area and there are security issues
- Business logic is shared between multiple applications or non .net applications
- Heavy Resource consumption
Know the Required Tools?
- RestStarter kit
- Web Services Software Factory (WSSF)
- Enterprise Library (EntLib)
Best Practices in WCF Designs:
WCF Design Guidelines:
- Separate service contracts from service implementation.
- Decorate an interface using the ServiceContract attribute and refrain from specifying this attribute on a class, i.e., your service contracts should be interfaces and not classes.
- Define services in class library not directly in host project
- Manipulate the service headers to specify metadata like, culture, session data, etc.
- Leverage the ServiceContract, DataContract, ServiceBehavior attributes to decorate your types and facilitate versioning of your service methods.
- Use data transfer objects to exchange data back and forth between the service and the domain objects
- Decouple the WCF configuration metadata from the web.config file to facilitate editing the WCF bindings, behaviors, etc. for each environment your service is supposed to work on
- Use Session/Singleton Instance model when required and make percall as default
WCF Binding Guidelines:
WCF Contracts Guidelines:
- Service Contract:
- Use the Name, Namespace parameters on all contracts and also use the Order parameter on all the data members
- If you would like to remove a service operation or update a service operation, refrain from changing the existing one rather, create new ones.
- Use the async programming pattern when you are calling WCF services to ensure that your user interface can work in a non-blocking mode.
- Use RESTful services when you would like to build light-weight and scalable WCF services that would leverage the HTTP protocol
- Data Contract:
- Avoid XMLSerializer and MessageContracts excepts for Interoperable scenarios and Rest services
- Avoid passing complex .net specific types for Interoperable servives
WCF Hosting Guidelines:
- WAS Hosting on Windows server 2008
- IIS Hosting for external HTTP only
- Self Hosting for stateful services, callback and .net service Bus
- Console based debug self host for development time
Reference books, you may like:Programming WCF Services: Design and Build Maintainable Service-Oriented Systems
WCF Multi-Layer Services Development with Entity Framework, 4th Edition
Learning WCF: A Hands-on Guide
WCF Exception Handling Guidelines:
- For operation Specific Exceptions,
- Try/Catch, throw FaultException<T>
- FaultException can be ambiguous to client because unhandled exceptions arrive as Fault exception
- Include Fault contract in Service Contract definition
- For global exception handling from services, use an error handler
- Define exception details in debug build only
WCF Proxy Guidelines:
- Proxy is best when your service is used by multiple applications
- Use static proxy class when possible instead of ChannelFactory
- Add service references for external services or when you want an async API on client
- Add references to data contract libraries before adding the service reference to avoid duplication definition
- If your WCF service is hosted on IIS you can turn on IIS compression for static and dynamic content to improve performance.
- You can use the Windows Performance Monitor to analyse the performance bottlenecks. You can enable WCF performance counters in config file
- Take advantage of NetTCP binding to boost the throughput of your WCF services.
- Use light-weight data exchange formats, i.e., JSON in your WCF service to minimize the network traffic that your WCF service would otherwise need to consume if SOAP were used as a data exchange format.
- You should always use DataContract Serializer in lieu of XMLSerializer for better performance.
- You can also explore the possibilities of using binary serialization formats like MessagePack to minimize the traffic even further.
- You can also compress the data transferred over the wire to cut down on the network traffic between the service provider and the service consumers.
- Since there is no built in way to cache service responses in WCF, you can write custom code to cache service responses.
- You should set WCF service throttling and service configuration appropriately to improve service performance
Please share you experiences on WCF for other Viewers to follow. Thanks for visiting !!
© 2015, admin. All rights reserved.