如何使用WCF Rest serice从客户端调用WCF Post方法 [英] How to call WCF Post method from Client Side using WCF Rest serice
问题描述
大家好,
我开发了一个WCF休息服务。 get方法和post方法如何从Web客户端调用wcf rest服务。我的代码是这样的
---- WCF接口方法
Hi All,
I developed one WCF Rest Service. get method and post methods how to call wcf rest service from web client. My code like this
----WCF Interface methods
[OperationContract]
[WebInvoke(UriTemplate = "UpdateTrackDetails",
Method = "POST", RequestFormat = WebMessageFormat.Json,ResponseFormat=WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
string UpdateTrackDetails(string trackdetails);
---接口的WCF实现
公共字符串UpdateTrackDetails(字符串trackdetails)
{
string time =;
DateTime dt = new DateTime();
try
{
// System.Web.Script.Serialization.JavaScriptSerializer json = new S. ystem.Web.Script.Serialization.JavaScriptSerializer();
string result =0;
TrackDetails _BusTrack = JsonConvert.DeserializeObject< trackdetails>(trackdetails);
time = _BusTrack.TrackTime;
string daa = Convert.ToDateTime(time).ToString(dd / MM / yyyy);
dt = Convert.ToDateTime(daa);
使用(var context = new SchoolBusTrackEntities())
{
context.BusTrackDetails.Add(
新的BusTrackDetail
{
BusID = Convert.ToInt32(_BusTrack.BusID),
纬度= _BusTrack.Latitude ,
经度= _BusTrack.Longitude,
// TrackTime = DateTime.Now
追踪时间= dt,
TrackTime1 =时间
}
);
result = context.SaveChanges()。 ToString();
}
返回结果;
}
catch(Exception ex)
{
返回ex.Message;
}
}
--- WCF配置文件
< system.servicemodel>
< services>
< service name =BusTrackService.SchoolBusTrackbehaviorconfiguration =ServiceBehavior>
< endpoint address =binding =webHttpBindingcontract =BusTrackService.ISchoolBusTrackbehaviorconfiguration =Web >
< identity>
< dns value =localhost>
< endpoint name =mexHttpBinding>
address =mex
binding =mexHttpBinding
contract =IMetadataExchange
/>
< behavior>
< servicebehaviors>
< behavior name =ServiceBehavior>
< datacontractserializer maxitemsinobjectgraph =10000000>
< servicemetadata httpgetenabled =true>
< servicedebug includeexceptiondetailinfaults =false>
< behavior>
< servicemetadata httpgetenabled =true>
< servicedebug includeexceptiondetailinfaults =false>
< endpointbehaviors>
< behavior name =Web>
< datacontractserializer maxitemsinobjectgraph =10000000>
< webhttp helpenabled =truedefaultoutgoingresponseformat = Jsondefaultbodystyl e =Bareautomaticformatselectionenabled =true>
<! - < webhttp> - >
< bindings>
< webhttpbinding>
< binding maxreceivedmessagesize =2147483647>
< readerquotas maxarraylength =2147483647maxstringcontentlength =2147483647>
< servicehostingennultiplesitebindingsenabled =true>
< system.webserver>
< modules runallmanagedmodulesforallrequests = true>
<! -
要在调试期间浏览Web应用程序根目录,请将以下值设置为true。
Set在部署之前为false以避免泄露Web应用程序文件夹信息。
- >
< directorybrowse enabled =true>
< system.diagnostics>
< trace autofl USH = 真 > < sources>
< source name =System.ServiceModel/>
switchValue =Information,ActivityTracing
propagateActivity = true>
< listeners> < add name =sdt>
type =System.Diagnostics.XmlWriterTraceListener
initializeData =serviceLog3.xml/>
----我的客户电话方式
public string call1()
{
string sURL =http:// localhost:52305 / SchoolBusTrack.svc / UpdateTrackDetails;
BusTrack1 _test = new BusTrack1();
_test.BusID = txtBusID.Text;
_test.Latitude = txtLatitude.Text;
_test。经度= txtLongitude.Text;
_test.TrackTime = txtTrackTime.Text;
_test.TrackTime1 = txtTrackTime1.Text;
string JsonString = new JavaScriptSerializer()。Serialize(_test);
var httpWebRequest =(HttpWebRequest)WebRequest.Create(sURL);
httpWebRequest.ContentType = 文本/ JSON;
httpWebRequest.Method =POST; // GET
string responseText =;
using(var streamWriter = new StreamWriter(httpWebRequest。 GetRequestStream()))
{
streamWriter.Write(JsonString); //任何参数
}
var httpResponse =(HttpWebResponse)httpWebRequest.GetResponse();
using(var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
responseText = streamReader.ReadToEnd();
}
返回responseText;
}
---在客户端调用不同的方式
string reqUrl =http://192.168.1.46/BusWCF/SchoolBusTrack.svc/UpdateTrackDetails ;
BusTrack1 _Bus = new BusTrack1();
_Bus.BusID = BusID;
_Bus.Latitude =纬度;
_Bus.Longitude =经度;
_Bus.TrackTime = TrackTime;
_Bus.TrackTime1 = TrackTime1;
var JsonString = new JavaScriptSerializer()。Serialize(_Bus);
// Response.Write(JsonString);
byte [] bytes = new UTF8Encoding()。GetBytes(JsonString.ToString());
WebRequest request = WebRequest.Create(reqUrl);
请求。超时= 2000;
request.Method =POST;
request.ContentType =application / json; charset = utf-8;
request.ContentLength = bytes.Length;
using(StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(JsonString);
}
WebResponse responce = request.GetResponse();
流阅读器= responce.GetResponseStream();
StreamReader sReader = new StreamReader(reader);
string outResult = sReader.ReadToEnd();
sReader.Close();
但是我收到了错误
遥控器服务器返回错误:(400)错误请求。
描述:在执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其来源的详细信息。代码。
异常详细信息:System.Net.WebException:远程服务器返回错误:(400)错误请求。
请告知我的错误是什么..
谢谢和问候
---WCF Implementation of Interface
public string UpdateTrackDetails(string trackdetails)
{
string time = "";
DateTime dt = new DateTime();
try
{
// System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();
string result = "0";
TrackDetails _BusTrack = JsonConvert.DeserializeObject<trackdetails>(trackdetails);
time = _BusTrack.TrackTime;
string daa = Convert.ToDateTime(time).ToString("dd/MM/yyyy");
dt = Convert.ToDateTime(daa);
using (var context = new SchoolBusTrackEntities())
{
context.BusTrackDetails.Add(
new BusTrackDetail
{
BusID = Convert.ToInt32(_BusTrack.BusID),
Latitude = _BusTrack.Latitude,
Longitude = _BusTrack.Longitude,
// TrackTime = DateTime.Now
TrackTime = dt,
TrackTime1 = time
}
);
result = context.SaveChanges().ToString();
}
return "result";
}
catch (Exception ex)
{
return ex.Message;
}
}
---WCF Config File
<system.servicemodel>
<services>
<service name="BusTrackService.SchoolBusTrack" behaviorconfiguration="ServiceBehavior">
<endpoint address="" binding="webHttpBinding" contract="BusTrackService.ISchoolBusTrack" behaviorconfiguration="Web">
<identity>
<dns value="localhost">
<endpoint name="mexHttpBinding">
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
<behaviors>
<servicebehaviors>
<behavior name="ServiceBehavior">
<datacontractserializer maxitemsinobjectgraph="10000000">
<servicemetadata httpgetenabled="true">
<servicedebug includeexceptiondetailinfaults="false">
<behavior>
<servicemetadata httpgetenabled="true">
<servicedebug includeexceptiondetailinfaults="false">
<endpointbehaviors>
<behavior name="Web">
<datacontractserializer maxitemsinobjectgraph="10000000">
<webhttp helpenabled="true" defaultoutgoingresponseformat="Json" defaultbodystyle="Bare" automaticformatselectionenabled="true">
<!--<webhttp>-->
<bindings>
<webhttpbinding>
<binding maxreceivedmessagesize="2147483647">
<readerquotas maxarraylength="2147483647" maxstringcontentlength="2147483647">
<servicehostingenvironment multiplesitebindingsenabled="true">
<system.webserver>
<modules runallmanagedmodulesforallrequests="true">
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directorybrowse enabled="true">
<system.diagnostics>
<trace autoflush="true"> <sources>
<source name="System.ServiceModel" />
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners> <add name="sdt">
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="serviceLog3.xml" />
----My Client Calling Method
public string call1()
{
string sURL = "http://localhost:52305/SchoolBusTrack.svc/UpdateTrackDetails";
BusTrack1 _test = new BusTrack1();
_test.BusID = txtBusID.Text;
_test.Latitude = txtLatitude.Text;
_test.Longitude = txtLongitude.Text;
_test.TrackTime = txtTrackTime.Text;
_test.TrackTime1 = txtTrackTime1.Text;
string JsonString = new JavaScriptSerializer().Serialize(_test);
var httpWebRequest = (HttpWebRequest)WebRequest.Create(sURL);
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";//GET
string responseText = "";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(JsonString);//any parameter
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
responseText = streamReader.ReadToEnd();
}
return responseText;
}
---calling Differnt way in client side
string reqUrl = "http://192.168.1.46/BusWCF/SchoolBusTrack.svc/UpdateTrackDetails";
BusTrack1 _Bus = new BusTrack1();
_Bus.BusID = BusID;
_Bus.Latitude = Latitude;
_Bus.Longitude = Longitude;
_Bus.TrackTime = TrackTime;
_Bus.TrackTime1 = TrackTime1;
var JsonString = new JavaScriptSerializer().Serialize(_Bus);
// Response.Write(JsonString);
byte[] bytes = new UTF8Encoding().GetBytes(JsonString.ToString());
WebRequest request = WebRequest.Create(reqUrl);
request.Timeout = 2000;
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = bytes.Length;
using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(JsonString);
}
WebResponse responce = request.GetResponse();
Stream reader = responce.GetResponseStream();
StreamReader sReader = new StreamReader(reader);
string outResult = sReader.ReadToEnd();
sReader.Close();
but i got the error
The remote server returned an error: (400) Bad Request.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Net.WebException: The remote server returned an error: (400) Bad Request.
please tel what is my error..
Thanks and Regards
推荐答案
这篇关于如何使用WCF Rest serice从客户端调用WCF Post方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!