I am trying from few days to consume wcf restful service but it is giving me bad reqeust. Please Help me out.
Here is my configuration file
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="state" allowCookies="true">
<security mode="None"></security>
</binding>
</webHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="True"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceBehaviour" name="RESTFUL_DEMO.Web.services.Calc">
<endpoint address="" bindingConfiguration="state" binding="webHttpBinding" name="Http" contract="RESTFUL_DEMO.Web.services.ICalc"/>
<endpoint address="abcd" binding="wsHttpBinding" name="wsHttp" contract="RESTFUL_DEMO.Web.services.ICalc"/>
<endpoint address="mex" binding="mexHttpBinding" name="MEX" contract="IMetadataExchange"/>
</service>
</services>
my interface for service contract and datacontract is as follows.
[ServiceContract(SessionMode = SessionMode.Allowed)]
[XmlSerializerFormat]
public interface ICalc
{
[OperationContract]
[WebInvoke(UriTemplate = "dowork", Method = "POST", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
int DoWork(Enroll a);
}
[DataContract]
public class Enroll
{
public Enroll()
{
}
public Enroll(string Avalue)
{
this.Avalue = Avalue;
}
[DataMember(IsRequired = true)]
public string Avalue
{
get;
set;
}
}
my code to consume the service is as follows
HttpWebRequest request = WebRequest.Create("http://localhost/RESTFUL_DEMO.Web/services/Calc.svc/dowork") as HttpWebRequest;
XmlDocument doc = new XmlDocument();
doc.Load(@"d:\test.xml");
string sXML = doc.InnerXml;
request.ContentLength = sXML.Length;
request.ContentType = "test/xml; charset=utf-8";
var sw = new StreamWriter(request.GetRequestStream());
sw.Write(sXML);
sw.Close();
WebResponse response = request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream());
String result = stream.ReadToEnd();
Best Answer
You have made a small mistake while consuming Rest service. You have specified ContentType of request to test/xml; charset=utf-8 but it should be text/xml or application/xml.
or it should be