WCF Service
This article explains some points about WCF services. I believe we should understand these points and their implementation also. The main intent to write this article is for those people who don't understand the exact utilization of keywords and settings during WCF service creation and hosting.
I have created a sample WCF service library and implemented an interface having a method Get info. Kindly refer to the image below for the basic structure of the web site:
Note that in the image shown above, I have also hosted this WCF service using a console application.
The main intent to write this article starts from here. I host this application and the edit app.config file using "Edit WCF configuration". Kindly see the image shown below:
The image below shows the layout of the app.config file.
Note
Thus in order to generate proxies, you need metadata information. When you remove the serviceMetadata-line you say you are not providing Meta data in WSDL format. But the line before, publishing your metadata in MEX, is still active, thus you can generate a proxy from those metadata. When you provide neither WSDL nor MEX formatted information, you cannot generate a proxy.
Now let's execute the procedure shown above more practically.
Point 1
The WCF service is up and running as shown in the image below:
Initially service metadata is enabled as shown below:
I just paste a baseAddress URL into the browser, it provides us metadata in WSDL format as shown in the image below:
But if I change it to "false" then it doesn't provide you metadata in WSDL format. Kindly refer to both images as shown below:
Point 2
Now let's understand why mexHttpBinding is important from a WCF perspective.
I've disabled the "mexHttpBinding" code segment and host our service. It prompts us an error at the time of adding a Service reference to the Client application.
The "IMetadataExchange" contract is for enabling metadata for the service. This is required for adding the service reference at the WCF client-side or it is a binding that returns metadata so you can build a proxy at the client side.
MEX endpoints are special endpoints that allow clients to receive the service's metadata using SOAP messages instead of HTTP get requests. You can create MEX endpoint that can be accessed through HTTP, HTTPS, TCP and even named pipes.
Point 3
The third point is about enabling the logging/tracing process in the client application so that I can see what happened at the time of calling an operation of the WCF Service.
I've created a client application and added a reference of WCF Service, kindly see an image show below:
To enable logging and tracing in the client application edit the app.config file. Kindly see the following image.
Go to Diagnostics and enable Log Auto Flush, MessageLogging and Tracing. Kindly see the image shown below:
Now go to "Diagnostics" -> "Message Logging" and set the properties to true as shown in the image below to log the exact information.
After setting the properties to true it asks you to update your app.config file, press yes to all. And go through once with the updated config file. Now we are done with all the requirements and ready to consume our service via the client. Press F5.
It will be the first appearance of the client application as shown in the following image:
I put some value in the text box and pressed on the GetInfo button, see the result below.
Now look at the .svclog files that exist in the root folder of the client application as shown in the image below:
Note
Don't forget to refresh this folder once.
Double-click on the app_messages file and see the result.
Response
I believe we learned remarkable points about WCF services, that we may encounter in daily routine work.
You can also have a look at MVC-related articles here: