I have exposed my REST API service using WCF Service Library and started by console application. when I try to consume the service from client ( another console application), I am getting "Bad Request" exception.
please see the code below :-
[ServiceContract(Namespace = "http://www.test.com/Enrollment")]
public interface IEnrollService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "enroll",
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml,
BodyStyle= WebMessageBodyStyle.Bare)]
string EnrollData(Enroll enrData);
}
public class EnrollService : IEnrollService
{
public string EnrollData(Enroll enrData)
{
return "Hello, your test data is " + enrData.AccountNumber;
}
}
[DataContract(Namespace = "http://www.test.com/Enrollment")]
public class Enroll
{
[DataMember]
public string ClientId
{
get;
set;
}
[DataMember]
public string AccountNumber
{
get;
set;
}
[DataMember]
public string TaxId
{
get;
set;
}
[DataMember]
public string TaxType
{
get;
set;
}
[DataMember]
public string EmailAddress
{
get;
set;
}
[DataMember]
public string Pin
{
get;
set;
}
[DataMember]
public string State
{
get;
set;
}
}
<system.serviceModel>
<services>
<service name="OEA.REST.EnrollService" behaviorConfiguration="OEABehavior">
<endpoint address="http://localhost:8010/OEA/Service/EnrollService"
binding="webHttpBinding" behaviorConfiguration="webHttp"
contract="OEA.REST.IEnrollService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8010/OEA/Service/EnrollService" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="OEABehavior">
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
HttpWebRequest req = null;
HttpWebResponse res = null;
try
{
string url = "http://localhost:8010/OEA/Service/EnrollService/enroll";
req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/xml; charset=utf-8";
req.Timeout = 30000;
req.Headers.Add("SOAPAction", url);
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.XmlResolver = null;
xmlDoc.Load(@"d:\test.xml");
string sXML = xmlDoc.InnerXml;
req.ContentLength = sXML.Length;
System.IO.StreamWriter sw = new System.IO.StreamWriter(req.GetRequestStream());
sw.Write(sXML);
sw.Close();
res = (HttpWebResponse)req.GetResponse();
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
<Enroll>
<ClientId>000</ClientId>
<AccountNumber>123</AccountNumber>
<TaxId>123</TaxId>
<TaxType>123</TaxType>
<EmailAddress>123</EmailAddress>
<Pin>123</Pin>
<State>122</State>
</Enroll>
I am getting "Bad Request" exception on req.GetResponse() method call. Just started learning REST. I am stuck up with POST request. Any help would be highly appreciated. Thanks in advance.
Your POST payload should be :
<Enroll xmlns="http://www.test.com/Enrollment">
<ClientId>000</ClientId>
<AccountNumber>123</AccountNumber>
<TaxId>123</TaxId>
<TaxType>123</TaxType>
<EmailAddress>123</EmailAddress>
<Pin>123</Pin>
<State>122</State>
</Enroll>
Your XML namespaces are wrong. I don't have time to correct it for you, but needs to be in the "http://www.test.com/Enrollment" namespace according to your data contract.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With