I got a mail asking question, "How could we remove .SVC from a WCF REST Service?"
For example, instead of
We need to remove, .svc extension from address of the WCF service.
Let us say, you have a WCF REST Service up and running
http://localhost:58230/Service1.svc/GetMessage
With output
To remove service extension, we will write a HTTP Module and remove the extension and rewrite the path.
Now to remove .svc follows below steps
- Add a class in WCF Application project.
- Add the namespace System.Web
- Implement the class from IHttpModule
public class Removesvc
: IHttpModule
- Before starting of current context take the context path and rewrite the URL.
context.BeginRequest += delegate
{
HttpContext
cxt = HttpContext.Current;
string
path = cxt.Request.AppRelativeCurrentExecutionFilePath;
int
i = path.IndexOf('/', 2);
if
(i > 0)
{
string
a = path.Substring(0, i) + ".svc";
string
b = path.Substring(i, path.Length - i);
string
c = cxt.Request.QueryString.ToString();
cxt.RewritePath(a, b, c, false);
}
};
Full source code for
RemoveSvc.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WcfService7
{
public class Removesvc : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication
context)
{
context.BeginRequest += delegate
{
HttpContext
cxt = HttpContext.Current;
string
path = cxt.Request.AppRelativeCurrentExecutionFilePath;
int
i = path.IndexOf('/', 2);
if
(i > 0)
{
string
a = path.Substring(0, i) + ".svc";
string
b = path.Substring(i, path.Length - i);
string
c = cxt.Request.QueryString.ToString();
cxt.RewritePath(a, b, c, false);
}
};
}
}
}
- Now we need to add the HTTP Module in configuration file of WCF Service.
<system.webServer>
<modules>
<add name ="removesvc" type ="WcfService7.Removesvc,WcfService7"/>
</modules>
</system.webServer>
Where, RemoveSvc is name of the class implementing IHttpModule and WcfService7 is the project name (namespace)
Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules>
<add name ="removesvc" type ="WcfService7.Removesvc,WcfService7"/>
</modules>
</system.webServer>
</configuration>
- Now host the service in IIS. [Read here : Hosting WCF Service in IIS ]
Now when you open WCF REST Service in browser, you can see you are able to call the service without extension ,
http://localhost:4567/Service1/GetMessage