wpf循环接收服务器端的Jsonwpf 字符串资源

  前段时间一直在做一个ERP系统,随着系统功能的完善,客户端(CS模式)变得越来越臃肿。现在想将业务逻辑层以下部分和界面层分离,使用Web Service来做。由于C#中通过直接添加引用的方来调用Web Service的方式不够灵活,故采取手动发送Http请求的方式来调用Web Service。最后选择使用Post方式来调用Web Service,至于安全性和效率暂不考虑。在学习使用的过程,遇到了很多问题,也花了很长时间来解决,网上相关的帖子很少,如果各位在使用的过程中有一些问题难以解决,可以找我哦。
  使用Post方式调用Web Service,需要在服务项目配置文件Web.config中添加使用Http协议的配置,在&system.web&标签中添加&webServices&&&protocols&&&add name= "HttpPost"/&&/protocols&&/webServices&配置,同时我们还可以添加&customErrors mode="Off" /&配置,这样可以在服务方法的返回值带出服务方法调用的异常信息,异常信息同样以xml的形式返回,这样便于客户端进行调试。
Web Service接口方法
   [WebMethod]&&&&&&& public string Project(string paramaters)&&&&&&& {&&&&&&&&&&&&&&&&&& }
public string Post(string methodName, string jsonParas)
string strURL = Url + "/" + methodN
//创建一个HTTP请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
//Post请求方式
request.Method = "POST";
//内容类型
request.ContentType = "application/x-www-form-urlencoded";
//设置参数,并进行URL编码
//虽然我们需要传递给服务器端的实际参数是JsonParas(格式:[{\"UserID\":\"0206001\",\"UserName\":\"ceshi\"}]),
//但是需要将该字符串参数构造成键值对的形式(注:"paramaters=[{\"UserID\":\"0206001\",\"UserName\":\"ceshi\"}]"),
//其中键paramaters为WebService接口函数的参数名,值为经过序列化的Json数据字符串
//最后将字符串参数进行Url编码
string paraUrlCoded = System.Web.HttpUtility.UrlEncode("paramaters");
paraUrlCoded += "=" + System.Web.HttpUtility.UrlEncode(jsonParas);
//将Json字符串转化为字节
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
//设置请求的ContentLength
request.ContentLength = payload.L
//发送请求,获得请求流
writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
catch (Exception)
Console.Write("连接服务器失败!");
//将请求参数写入流
writer.Write(payload, 0, payload.Length);
writer.Close();//关闭请求流
String strValue = "";//strValue为http响应所返回的字符流
//获得响应流
response = (HttpWebResponse)request.GetResponse();
catch (WebException ex)
response = ex.Response as HttpWebR
Stream s = response.GetResponseStream();
//服务器端返回的是一个XML格式的字符串,XML的Content才是我们所需要的Json数据
XmlTextReader Reader = new XmlTextReader(s);
Reader.MoveToContent();
strValue = Reader.ReadInnerXml();//取出Content中的Json数据
Reader.Close();
s.Close();
return strV//返回Json数据
  Url的格式样例:"http://59.68.29.106:8087/IFT_Project.asmx"
  methodName参数就是"Project"
  JsonParas就是使用C# JavaScriptSerializer将List&Object&类型的对象序列化之后得到的值,数据格式:[{\"UserID\":\"0206001\",\"UserName\":\"ceshi\"}],Json数据中的中括号代表由着多个对象集合序列化,花括号代表一个对象序列化得到的结果,花括号里面的内容使用键值对的方式展示,多个属性之间用逗号隔开,每个对象也用逗号隔开。
  request.ContentType必须设置值,建议使用"application/x-www-form-urlencoded",设置其他值就很容易报服务器内部异常,使用这种方式服务接口方法返回的是xml格式的字符串
  payload将请求参数转换成二进制来保存,此处一定要将&paramaters&加入其中,不然会报异常缺少参数,paramaters就是服务接口函数的参数名。函数中使用了URL编码,注意在编码的时候只需要将键和值进行编码,不要将中间的=进行编码,不然getResponse的时候会报异常。
  request.ContentLength也是必须设置的值
  在得到响应流之后Stream s = response.GetResponseStream();需要使用Reader来解析响应流,这个地方我使用的是XmlTextReader,因为我服务方法返回的是xml格式的字符串,其中Json数据在xml的Content中。在取出Json数据之后,再进行相应的反序列化即可得到对象。
  在学习使用Post调用方式的过程中,查看了一些帖子,但是网上的帖子很少,不少帖子中也给出了一下Post方法的样例,给出的很多post方法没有明确给出传入字符串的格式,导致我的传入参数jsonParas缺少了键paramaters,测试调试了很久才发现这个错误,最终差点放弃了。还有ContentType的设置也很重要,使用其他的值对传入参数的要求很高,初学者不建议使用其他方式。初期使用Post方式的时候,在getResponse()处容易报异常,可以设置customerErrors mode将异常信息返回给客户端,这样容易调试。
转载于:http://www.cnblogs.com/caiwenz/p/3910566.html
阅读(...) 评论()没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!急!!!关于服务端解析客户端http方法post过来的json字符串
[问题点数:20分,结帖人MISSLilyliu]
急!!!关于服务端解析客户端http方法post过来的json字符串
[问题点数:20分,结帖人MISSLilyliu]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年3月 总版技术专家分月排行榜第二
2014年2月 Java大版内专家分月排行榜第一2013年8月 Java大版内专家分月排行榜第一2013年5月 Java大版内专家分月排行榜第一2013年4月 Java大版内专家分月排行榜第一2013年3月 Java大版内专家分月排行榜第一2013年2月 Java大版内专家分月排行榜第一
2016年1月 Java大版内专家分月排行榜第一2015年12月 Java大版内专家分月排行榜第一2015年9月 Java大版内专家分月排行榜第一2015年8月 Java大版内专家分月排行榜第一
2016年3月 Java大版内专家分月排行榜第二2016年2月 Java大版内专家分月排行榜第二2015年11月 Java大版内专家分月排行榜第二2015年10月 Java大版内专家分月排行榜第二
2016年1月 Java大版内专家分月排行榜第一2015年12月 Java大版内专家分月排行榜第一2015年9月 Java大版内专家分月排行榜第一2015年8月 Java大版内专家分月排行榜第一
2016年3月 Java大版内专家分月排行榜第二2016年2月 Java大版内专家分月排行榜第二2015年11月 Java大版内专家分月排行榜第二2015年10月 Java大版内专家分月排行榜第二
2013年3月 总版技术专家分月排行榜第二
2014年2月 Java大版内专家分月排行榜第一2013年8月 Java大版内专家分月排行榜第一2013年5月 Java大版内专家分月排行榜第一2013年4月 Java大版内专家分月排行榜第一2013年3月 Java大版内专家分月排行榜第一2013年2月 Java大版内专家分月排行榜第一
2016年1月 Java大版内专家分月排行榜第一2015年12月 Java大版内专家分月排行榜第一2015年9月 Java大版内专家分月排行榜第一2015年8月 Java大版内专家分月排行榜第一
2016年3月 Java大版内专家分月排行榜第二2016年2月 Java大版内专家分月排行榜第二2015年11月 Java大版内专家分月排行榜第二2015年10月 Java大版内专家分月排行榜第二
2016年1月 Java大版内专家分月排行榜第一2015年12月 Java大版内专家分月排行榜第一2015年9月 Java大版内专家分月排行榜第一2015年8月 Java大版内专家分月排行榜第一
2016年3月 Java大版内专家分月排行榜第二2016年2月 Java大版内专家分月排行榜第二2015年11月 Java大版内专家分月排行榜第二2015年10月 Java大版内专家分月排行榜第二
匿名用户不能发表回复!|ajax请求的拼接、发送和服务器端json字符串的拼接案例
发送ajax请求,拼接请求字符串,形如:index.html?a=1&a=2&a=3&b=4&b=5
//when you click go on shopping or go to
countCenter send a ajax request
&//the ajax request will update all cartPage
&//solute method
:req.send("bookIds="+bookId[0]+"&bookIds="+bookId[1]+"&bookIds="+bookId[2])
&// "count" the same!
&//forexample
:index.html?a=1&a=2&a=3&b=4&b=5
&function updateAllCart(){
&&//send a ajax request !
&&&if(window.XMLHttpRequest){
= new XMLHttpRequest();
&&&&req=new
ActiveXObject("MICROSOFT.XMLHTTP");
&&&// status
listenning
&&&req.onreadystatechange=resultL
&&&//create http
&&&req.open("post","shopingCar.do",true);
&&&req.setRequestHeader("content-type","application/x-www-form-urlencoded");
&&&var innerUl
=document.getElementByIdx_x("innerUl");
&&&var uls
=innerUl.getElementsByTagName_r("ul");
bookIdStr="";
&&&for(var
i=0;i&uls.i++){
&&&&bookIdStr+="bookIds="+uls[i].id+"&";
&&&//alert(bookIdStr);
numberStr="";
&&&var inputs =
innerUl.getElementsByTagName_r("input")
&&&for(var
i=0;i&inputs.i++){
&&&&numberStr+="numbers="+inputs[i].value+"&";
&&&numberStr=numberStr.slice(0,numberStr.length-1);
&&&//alert(bookIdStr+numberStr);
&&&//numberStr.trim();
&&&if(bookIdStr==""){
&&&&req.send("bookIds=-1");
&&&&alert(bookIdStr+numberStr);
&&&&req.send(bookIdStr+numberStr);
&监听ajax请求,显示页面
function resultListen(){
&&if(req.readyState==4){
flag=document.getElementByIdx_x("flag");
&&&&if(req.status!=200){
&&&&&flag.innerHTML="Server
str = req.responseT
&&&&//document.write(str);发放
&&&&str="var
bookInfos="+
&&&&alert(str);
&&&&(str);
innerUl = document.getElementByIdx_x("innerUl");
donot set innerStr=""
innerStr="";
&&&&for(var
i=0;i&bookInfos.i++){
&&&&&innerStr+="&ul
onmouseover='changeColor(this)' id='"+bookInfos[i].bookId+"'
name='bookIds'&&li&"+bookInfos[i].bookId+"&/li&&li
style='width:150font-size:17px'&"+bookInfos[i].bookName+"&/li&&li&"+bookInfos[i].price+"&/li&&li&"+bookInfos[i].vipPrice+"&/li&&li
id='cartNumber'&&input type='text'
size=7 id='number' name='numbers' value='"+bookInfos[i].number+"'
style='height:19px'/&&/li&&li
style='font-weight:600'&&a
href='javascript:deleteCart("+bookInfos[i].bookId+")'&Delete&/a&&/li&&/ul&";
&&&&innerUl.innerHTML=innerS
服务器端应用控制器,获取参数,处理请求,拼接json字符串,返回客户端
用request.getParamenterValues("")获得http请求的参数数组
var a=""; 表示长度为0的字符串,而不是空白字符
应用控制器可以返回一个页面,再由js去innerHTML,也可以printWriter一个json字符串,返回的转发路径为null,表示不转发
public class ShopingActionImpl implements
InterAction {
public String doService(HttpServletRequest
&&&HttpServletResponse
response) {
&&String[] bookIdsStr =
request.getParameterValues("bookIds");
&&String bookIdStr =
request.getParameter("bookId");
&&// 得到会话对象
&&HttpSession session =
request.getSession();
&&// 得到用户登陆信息
&&UserPO po = (UserPO)
session.getAttribute("userInfo");
&&if (po == null) {
"UserLoginRegister.jsp";
&&// 从Session中取得购物车集合
&&HashMap&Integer,
ShopingDTO& shopmap =
(HashMap&Integer, ShopingDTO&)
&&&&.getAttribute("shoping");
&&//System.out.println(bookIdsStr[0]);
&&if(bookIdsStr!=null){
&&&//&清除购物车
&&&shopmap.clear();
&&&if("-1".equals(bookIdsStr[0])){
&&&&System.out.println("哈哈"+bookIdsStr[0]);
&&&&return
&&&//调用业务层方法
&&&InterShopingService
service = new ShopingServiceImpl();
&&&for(int
i=0;i&bookIdsStr.i++){
bookIdsInt = Integer.parseInt(bookIdsStr[i]);
&&&&&service.shopManager(bookIdsInt,
catch (SQLException e) {
&&&&&e.printStackTrace();
&&&&String[]
numbersStr = request.getParameterValues("numbers");
&&&&//封装ShopingCarVO
&&&&ShopingCarVO
vo=new ShopingCarVO();
&&&&vo.setId(bookIdsStr);
&&&&vo.setNumber(numbersStr);
&&&&&service.shopManagerModi(vo,
catch (SQLException e) {
&&&&&e.printStackTrace();
&&&&&request.setAttribute("shopingCarErrorInfo",
"购物车异常");
&&&&&return
"shopingCarError.jsp";
&&// 如果有请求的bookId
&&if (bookIdStr != null) {
&&&int bookIdInt
= Integer.parseInt(bookIdStr);
调用业务组件,完成购物车的管理
&&&InterShopingService
service = new ShopingServiceImpl();
&&&&service.shopManager(bookIdInt,
&&&} catch
(SQLException e) {
&&&&e.printStackTrace();
&&&&request.setAttribute("shopingCarErrorInfo",
"购物车异常");
&&&&return
"shopingCarError.jsp";
调用工具类,拼接json对象,返回json字符串
&&// 首先遍历map集合
&&StringBuffer sb = new
StringBuffer();
&&sb.append("[");
&&for (ShopingDTO dto :
shopmap.values()) {
&&&sb.append("{");
&&&sb.append("bookId:"
+ dto.getId() + ",");
&&&sb.append("bookName:'"
+ dto.getBookName() + "',");
&&&sb.append("price:"
+ dto.getPrice() + ",");
&&&sb.append("vipPrice:"
+ dto.getVipPrice() + ",");
&&&sb.append("number:"
+ dto.getNumber());
&&&sb.append("},");
&&sb = new
StringBuffer(sb.substring(0, sb.length() - 1));
&&sb.append("]");
&&&PrintWriter
writer = response.getWriter();
发送json字符串到客户端
&&&writer.print(sb.toString());
&&} catch (IOException e) {
&&&e.printStackTrace();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 wpf brush 字符串 的文章

 

随机推荐