I have a WCF service XYZ that will be deployed on a number of hosts. Each such service may have a connection to another XYZ service deployed on one of the other hosts. It’s a distributed system where the states will differ between the services.
In order to communicate it doesn’t really make sense for me to “Add Service Reference” in Visual Studio because that will just add redundancy (the service already knows what it’s going to be communicating with).
So currently my idea is to specify the other service endpoints in the App.config files of each service. For example:
<client>
<endpoint name="BEL"
address="tcp://us.test.com:7650/OrderManagementService"
binding="tcpBinding"
contract="IOrderManagementService"/>
<endpoint name="BEL2"
address="tcp://us.test2.com:7650/OrderManagementService"
binding="tcpBinding"
contract="IOrderManagementService"/>
</client>
Now, I just want a way to read these settings and create ChannelFactories and Channels in my code. However, it’s turning out to be a hassle to do this.
Two questions: am I doing things right; and if so, what’s the best way to extract these values from the config file?
Creating channels directly isn’t hard, and all the endpoint configuration is read in for you. Try something like this:
Note that the proxy needs closing properly (which means calling
CloseorAbortcorrectly) as soon as you have finished with it. However, you can leave the factory open for long periods, even in a cache.You can encapsulate this into helper methods to make the calling code simple: