We have a WCF REST service that connects to a database. In fact, we have several instances of the database, all with the same schema.
We would like to set up one endpoint for each database instance and associate a connection string with the endpoint. The service would read the connection string and connect to the appropriate SQL Server instance.
I’m sure this is possible; is it a good idea? How do I set it up? Is there documentation on MSDN?
Edit: I found this question, where the answer suggests adding connection information on the client in a header. I don’t want to do that—for security reasons, and because I do want to have a distinct uri for each database.
This was a bit harder than I thought. WCF has so many extensibility points its hard to pick the right one. Please answer or comment if you think there’s a better way, or anything wrong with this.
I’ve settled on using a custom class that implements IEndpointBehavior and IDispatchMessageInspector. I have a class derived from BehaviorExtensionElement that lets me associate the behavior with an endpoint in configuration. This blog post describes hot do do that.
My
DatabaseConnectionContextclass looks like this:In my service class I have this method:
My
BehaviorExtensionElementclass looks like this:My web.config contains something like this:
Each
<endpoint />element in the<services />section has itsbehaviorConfigurationset to the name of an appropriate element from the<endpointBehaviors />section.