分享

asp.net 与datasnap交互 Demo

 aaie_ 2013-12-04
基本数据
-->asp.net
using System;
using System.Collections.Generic;
using System.Text;
namespace WindowsFormsApplication1
{
    public class TJSONDataDemo
    {
        public TJSONDataDemo() { }
        public TResult[] result;
    }
    public class TResult
    {
        public string type;
        public Int32 id;
        public TRecList fields;
    }
    public class TRecList
    {
        public TRecObj[] MyRecList;
    }
    public class TRecObj
    {
        public string type;
        public Int32 id;
        public TFieldList fields;
    }
    public class TFieldList
    {
        //public Array[] Arr;
        public string Name;
        public Int32 Age;
        public double Birthday;
        public double Tall;
    }
    /*
    
     */
}
 
-->Delphi Xe2
type
  TMyRec= class
  private
    Name: string;
    Age: Integer;
    Birthday: TDateTime;
    Tall: Double;
  end;
  TMyClassDemo= class
  private
    MyRecList: array of TMyRec;
  end;
 
 
-->asp.net --->datasnap_rest
  #region "发收测试"

        /// <summary>
        /// 接收JSON数据  并解析
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            //
            string ret = string.Empty;
            string paramData = string.Empty;
            Encoding dataEncode = Encoding.Default; ;
            try
            {
                byte[] byteArray = dataEncode.GetBytes(paramData); //转化
                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(@"http://192.168.0.71:8080/DataSnap/Rest/TServerMethods1/JsonMarshallDemo"));
                //webReq.Method = "post";
                // webReq.ContentType = "application/x-www-form-urlencoded";
                //webReq.ContentType = "application/json";
                //webReq.ContentLength = byteArray.Length;
                //Stream newStream = webReq.GetRequestStream();
                //newStream.Write(byteArray, 0, byteArray.Length);//写入参数
                //newStream.Close();
                webReq.UseDefaultCredentials = true;
                string username = "admin";
                string userPass = "admin";
                string code = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", username, userPass)));
                webReq.Headers.Add("Authorization", "Basic " + code);
                HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
                ret = sr.ReadToEnd();
                TJSONDataDemo jDemo = JsonMapper.ToObject<TJSONDataDemo>(ret);
               
                textBox1.Text = ret;
                sr.Close();
                response.Close();
                //newStream.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// 发送JSON数据 Demo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            string ret = string.Empty;
            string paramData = string.Empty;
            TRecList recList= new TRecList();
            recList.MyRecList= new TRecObj[3];
            for (int i = 0; i < recList.MyRecList.Length; i++)
            {
                recList.MyRecList[i] = new TRecObj();
                recList.MyRecList[i].id = i;
                recList.MyRecList[i].fields = new TFieldList();
                recList.MyRecList[i].fields.Age = i;
                recList.MyRecList[i].fields.Birthday = 12.22;
                recList.MyRecList[i].fields.Name = "姓名"+ i.ToString();
                recList.MyRecList[i].fields.Tall = 1223.33;
            }
            paramData = JsonMapper.ToJson(recList);
           
            Encoding dataEncode = Encoding.UTF8 ;
            try
            {
                byte[] byteArray = dataEncode.GetBytes(paramData); //转化
                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(@"http://192.168.0.71:8080/DataSnap/Rest/TServerMethods1/JsonDemo/jsoData"));
                webReq.Method = "post";
                // webReq.ContentType = "application/x-www-form-urlencoded";
                webReq.ContentType = "text/plain;charset=UTF-8";
                webReq.Accept = "application/json";
                //webReq.Credentials = CredentialCache.DefaultCredentials;
                webReq.UseDefaultCredentials = true;
                string username="admin";
                string userPass= "admin";
                string code = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", username, userPass)));
                webReq.Headers.Add("Authorization", "Basic " + code);
                /*
                  request.Credentials = CredentialCache.DefaultCredentials;
                //获得用户名密码的Base64编码
                string code = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", userName, password)));
                //添加Authorization到HTTP头
                request.Headers.Add("Authorization", "Basic " + code);
                 */
               
               
                //webReq.AuthenticationLevel= System.Net.Security.AuthenticationLevel.
                webReq.ContentLength = byteArray.Length;
                Stream newStream = webReq.GetRequestStream();
                newStream.Write(byteArray, 0, byteArray.Length);//写入参数
                newStream.Close();
                HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
                ret = sr.ReadToEnd();
                //TJSONDataDemo jDemo = JsonMapper.ToObject<TJSONDataDemo>(ret);

                textBox1.Text = ret;
                sr.Close();
                response.Close();
                //newStream.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        #endregion
 
-->Xe2_rest 服务器
...验证
procedure TServerContainer1.TDSAuthenticationManagerUserAuthenticate(Sender: TObject;
  const Protocol, Context, User, Password: string; var valid: Boolean;
  UserRoles: TStrings);
begin
  //
  if (User='admin') and (Password='admin') then
    valid:= true
  else valid:= False;
end;
 
...处理查询
function TServerMethods1.JsonMarshallDemo: TJSONValue;
var
  myClsDemo: TMyClassDemo;
  i: Integer;
  jm: TJSONMarshal;
  jv: TJSONValue;
begin
  myClsDemo:= TMyClassDemo.Create;
  SetLength(myClsDemo.MyRecList,10);
  for i := 0 to 9 do begin
    myClsDemo.MyRecList[i]:= TMyRec.Create;
    myClsDemo.MyRecList[i].Name:= '姓名'+ IntToStr(i);
    myClsDemo.MyRecList[i].Age:= i;
    myClsDemo.MyRecList[i].Birthday:= now;
    myClsDemo.MyRecList[i].Tall:= i+ 1.2;
  end;
  jm:= TJSONMarshal.Create();
  jv:= jm.Marshal(myClsDemo);
  jm.Free;
  myClsDemo.Free;
  Result:= jv;
end;
 
 
...JSON提交
function TServerMethods1.updateJsonDemo(field: string;
  data: TJSONObject): string;
begin
  //
  Result:= field;

//  Result:= Result+ data
//  ;
  if data.Null then begin
    Result:= Result+ ' Data is null';
  end else begin
    Result:= Result+ ' data is not null';
    result:= Result+ data.ToString();
  end;
end;
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多