DataSnap與JSON序列化(4)

來源:互聯網
上載者:User

delphi prism作為datasnap client可以調用delphi寫的REST Server中的方法。

首先,可能是測試版的緣故,某些datasnap的組件,如TAdoDbxDatasnapConnection,在工具箱中沒有安裝,需要手動安裝,C:/Program Files/Common Files/CodeGear Shared/Delphi Prism/Shared Assemblies/7.0/Borland.Data.AdoDBXClient.dll

datasnap調用寫法:

method MainForm.button1_Click(sender: System.Object; e: System.EventArgs);<br />var<br /> C:TAdoDbxDatasnapConnection;<br /> vC:TADODBXCommand;<br />begin<br /> C:=new TAdoDbxDatasnapConnection();<br /> try<br /> C.ConnectionString:=<br /> 'CommunicationProtocol=http;'+<br /> 'HostName='+textBox_Server.Text+';'+<br /> 'Port='+textBox_Port.Text;<br /> C.Open;</p><p> vC:=C.CreateCommand as TADODBXCommand;<br /> try<br /> vC.CommandType:=System.Data.CommandType.StoredProcedure;// TDBXCommandTypes.DSServerMethod;<br /> vC.CommandText:='TServerMethods1.ReverseString';<br /> vC.Prepare;<br /> vC.Parameters[0].Value:=textBox_RawString.Text;<br /> vC.ExecuteNonQuery;<br /> textBox_Result.Text:=vC.Parameters[1].Value.ToString;<br /> finally<br /> vC.Dispose;<br /> end;</p><p> finally<br /> C.Dispose;<br /> end;<br />end;

http get的寫法是:

method MainForm.button3_Click(sender: System.Object; e: System.EventArgs);<br />var<br /> J:TJSONObject;<br /> S:string;<br /> vURL:string;<br /> vHC:RemObjects.InternetPack.Http.HttpClient;<br />begin<br /> vURL:='http://'+textBox_Server.Text+':'+textBox_Port.Text+'/datasnap/rest/TServerMethods1/ReverseString/';<br /> vURL:=vURL+system.Uri.EscapeDataString(textBox_RawString.Text);<br /> vHC:=new RemObjects.InternetPack.Http.HttpClient();<br /> S:=vHC.Get(vURL);<br /> //textBox_Result.Text:=S;<br /> J:=new Borland.Data.TJSONObject();<br /> J.Parse(System.Text.Encoding.ASCII.GetBytes(S),0);<br /> textBox_Result.Text:=TJSONArray(J.Get(0).JsonValue).Get(0).Value;<br />end;

注意參數的編碼,需要使用函數system.Uri.EscapeDataString()來編碼。

比如,參數:AB CDE上海FG、//?/,會被轉義為:AB%20CDE%E4%B8%8A%E6%B5%B7FG%E3%80%81%5C%2F%3F%5C

 

出現一個問題,

當用localhost這樣調用時,沒有問題,得到:{"result":[//?/////u3001GF/u6D77/u4E0AEDC BA]}

http://localhost:8080/datasnap/rest/TServerMethods1/ReverseString/AB%20CDE%E4%B8%8A%E6%B5%B7FG%E3%80%81%5C%2F%3F%5C

 

但是如果用外網的IP來調用時,就出現錯誤:

http://210.x.x.x:8080/datasnap/rest/TServerMethods1/ReverseString/AB%20CDE%E4%B8%8A%E6%B5%B7FG%E3%80%81%5C%2F%3F%5C

錯誤資訊是: 500 Internal Server Error,The request was rejected by the HTTP filter. Contact the server administrator. (12217)

 

而參數換成簡單的ABCD就可以:

http://210.x.x.x:8080/datasnap/rest/TServerMethods1/ReverseString/ABCD

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.