如何使用WCF Rest serice从客户端调用WCF Post方法 [英] How to call WCF Post method from Client Side using WCF Rest serice

查看:73
本文介绍了如何使用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 =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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆