How to host my WCF service in my website?
asp.net, hosting, iis, wcf
Solution
You have basically two options, I believe:
Option 1 - "bin" deploy (preferred option)
- compile your WCF service into a DLL (class library)
- create a website in IIS
- copy the WCF DLL's into the website's `.\bin` folder
- create a `*.svc` file in that website
- add an appropriate `web.config` in the website folder to define your endpoints and service configuration etc.
Your WCF service will now be reachable at the website's base address, plus the name of the `*.svc` file, e.g.
http://myserver/someweb/Myservice.svc
Your `*.svc` would look something like this:
<%@ ServiceHost Language="C#" Debug="true"
Service="WCF_Simple_Service.HelloIndigoService" %>
The `Service=` attributes denotes the class implementing the service - fully qualified with its namespace.
Option 2 - put stuff into `App_Code`
- create a website in IIS
- put all your WCF related `*.cs` files directly into the `.\App_Code` folder
- create a `*.svc` file in that website
- add an appropriate `web.config` in the website folder to define your endpoints and service configuration etc.
Your WCF service will now be reachable at the website's base address, plus the name of the `*.svc` file, e.g.
http://myserver/someweb/Myservice.svc
Your `*.svc` would look something like this:
<%@ ServiceHost Language="C#" Debug="true"
Service="Service"
CodeBehind="~/App_Code/Service.cs" %>
A simple, sample `web.config` might look something like this:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="WithDebug">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service name="SimpleWCF.HelloIndigoService" behaviorConfiguration="WithDebug">
<endpoint
address=""
binding="basicHttpBinding"
contract="SimpleWCF.IHelloIndigoService" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
You basically define your `<service>` tag - and again: the `name=` denotes the class implementing the service - fully qualified with its namespace. It must contain at least one endpoint - a "mex" endpoint is optional - but very useful, especially for development and testing. It allows client to "discover" the service and get its service description so it can interface with it.
Once your service is deployed in IIS, you can see it in action using a tool like the WCF Test Client that ships for free with WCF, or SoapUI which is a general-purpose SOAP testing utility (with a free edition for you to use).
Problem
I am new to WCF. I have developed a sample WCF service. My service uses the `basicHttp` binding. I host my service in local IIS 7.5 using WAS and it works fine. Now I want to host my service in my website. I search Google but there most of them are hosted in localhost in IIS. Please tell me how to I do that? It will be better to refer some tutorial or step by step guide.