In an ASP.NET Core application(using the full .NET framework) we had to consume a WCF service.
Should be easy right? Unfortunately it turned out that be more work than I expected. In a first post I explained the steps how to generate a Client Proxy, this post is about setting the configuration.
WCF configuration can be a daunting beast with a lot of options and things that can go wrong. The code generated by the proxy hardcodes (some part) of the configuration in the WCF proxy and provides you a partial method to override it but that’s not the approach we want to take.
I know we’ll host the WCF service in IIS, so adding a web.config and putting the configuration logic over there sounds nice…
Let’s try that:
- Open the generated proxy reference file and remove the call to Service1Client.GetDefaultBinding() and Service1Client.GetDefaultEndpointAddress() in the constructor. (Note: this is only for testing purposes)
- Right click on your ASP.NET Core project and add a web.config file.
- Right click on the web.config and choose Edit WCF configuration.
- Go to the Client section and choose Create a New Client…
- Follow the steps through the Wizard. After completing it you should have something like this inside your web.config:
- Let’s now try to create a client proxy instance and execute a call:
- Unfortunately, this didn’t work and we end with an exception when we try to run our application:
- If that doesn’t work, where should we put this configuration? (And yes, I know I can do everything through code but that is not what I want here).
- An ASP.NET Core project is an executable behind the scenes. The only thing that IIS does is forward the request to Kestrel that invokes the DotNet process.
- This executable has its own configuration file that is generated for you out of the box behind the scenes.
- If you want to change this config, you have to add an app.config instead of a web.config to your project. Let’s just rename the file, rebuild our project and try again…
- This time it works!