如何使用WCF Rest serice从客户端调用WCF Post方法

编程入门 行业动态 更新时间:2024-10-27 14:23:46
本文介绍了如何使用WCF Rest serice从客户端调用WCF Post方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

大家好, 我开发了一个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 =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 = "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 = "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方法

本文发布于:2023-11-24 11:32:05,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何使用   客户端   方法   WCF   serice

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!