WCF REST POST error bad request 400
Posted
by lyatcomit
on Stack Overflow
See other posts from Stack Overflow
or by lyatcomit
Published on 2010-04-21T09:57:18Z
Indexed on
2010/04/21
10:03 UTC
Read the original article
Hit count: 1022
Here's my code:
DOAMIN:
using System;
using System.Collections;
using System.Runtime.Serialization;
namespace Comit.TrafficService.Services.Mobile
{
[DataContract(Namespace = "http://192.168.0.161:9999/TrafficService/Domain/Mobile")]
public class Error
{
[DataMember]
public int Id { get; set; }
[DataMember]
public DateTime Time { get; set; }
public string Message { get; set; }
[DataMember]
public string Stacktrace { get; set; }
[DataMember]
public string Os { get; set; }
[DataMember]
public string Resolution { get; set; }
}
}
CONTRACT:
using System.ServiceModel;
using System.ServiceModel.Web;
using Comit.TrafficService.Services.Mobile;
namespace Comit.TrafficService.Services.Contracts
{
[ServiceContract(Name = "MobileErrorService")]
public interface IMobileError
{
/// <summary>
/// ???????????
/// </summary>
/// <param name="Error">??????</param>
/// <returns></returns>
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedResponse,
UriTemplate = "ErrorReport",
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml)
]
int ErrorReport(Error error);
}
}
SERVICE:
using System.ServiceModel.Web;
using Comit.TrafficService.Services.Contracts;
using Comit.TrafficService.Dao.Mobile;
using System;
using Comit.TrafficService.Services.Mobile;
namespace Comit.TrafficService.Services
{
public class MobileErrorService : IMobileError
{
public int ErrorReport(Error error)
{
return HandleAdd(error);
}
public int HandleAdd(Error error)
{
Console.WriteLine("?????error.Message:" + error.Message);
ErrorDao edao = new ErrorDao();
Console.WriteLine("??error" );
int result = (int)edao.Add(error);
return result;
}
}
}
Configuration:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="Comit.TrafficService.Services.MobileErrorService">
<host>
<baseAddresses>
<add baseAddress="http://192.168.0.161:9999"/>
</baseAddresses>
</host>
<endpoint address="http://192.168.0.161:9999/Comit/TrafficService/Services" binding="webHttpBinding" contract="Comit.TrafficService.Services.Contracts.IMobileError"
behaviorConfiguration="RestfulBehavior" name="webHttpBinding">
</endpoint>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="RestfulBehavior">
<webHttp/>
<dataContractSerializer ignoreExtensionDataObject="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Host:
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using Comit.TrafficService.Services;
namespace ServiceTest
{
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(MobileErrorService)))
{
host.Opened += delegate
{
Console.WriteLine("CalculaorService????,????????!");
};
host.Open();
Console.Read();
}
}
}
}
Client code:
using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using TestWCFRest.WcfServices.Services;
using System.Net;
namespace TestWCFRest.WcfServices.Hosting
{
class Program
{
static void Main(string[] args)
{
//using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
//{
// host.Opened += delegate
// {
// Console.WriteLine("CalculaorService????,????????!");
// };
// host.Open();
// Console.Read();
//}
HttpWebRequest req = null;
HttpWebResponse res = null;
try
{
string url = "http://192.168.0.161:9999/Comit/TrafficService/Services/ErrorReport";
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);
}
}
}
}
It's my first time I'm trying to do somethinf with WCF so I don't know how to solve this problem. Since there is a lot of professionals here, I would appreciate your help in solving this. Thank you in advance!
© Stack Overflow or respective owner