1

Datasnap サーバーがあり、次の名前のメソッドがあります。

function TServerMethodsMain.AddCity( ACity : TJSONObject ) : Boolean ;

このメソッドを呼び出すために、以下の小さな php コードを実行しました。

<?php

class city
{
   public $id;
   public $description;
   public $uf;          
}

$objcity = new city ;

$objcity -> id          = 1         ;
$objcity -> description = 'MY CITY' ;
$objcity -> uf          = 'XX'      ;

$url  = 'http://192.168.1.101:8088/datasnap/rest/TServerMethodsMain/AddCity/' ;
$url .= json_encode( $objcity ) ;

$page = file($url) ;  

$show = json_decode($page[0]);

echo '<pre>';

print_r ($show);

echo '</pre>';

?>

ブラウザ (Firefox または IE) から次のエラー メッセージが表示されました。

警告: file(http://192.168.1.101:8088/datasnap/rest/TServerMethodsMain/AddCity/{"id":1,"description":"MY CITY","uf":"XX"}) [function.ファイル]: ストリームを開けませんでした: HTTP 要求が失敗しました! C:\xampp\htdocs\json-php\index.php の 19 行目の HTTP/1.1 500 内部サーバー エラー

さて、私はこのphpコードで正常に動作する他のメソッドを持っていますが、パラメーターとしてプリミティブ型を渡す場合にのみ:文字列、整数...

デバッグを行ったところ、パラメーターJSONObjectオブジェクト( unMarshall )に変換する必要がある瞬間に問題が発生することがわかりました。クライアント Delphi Win32 でこのメソッドを呼び出すと、正常に動作します。

誰も問題について何か知っていますか?

ありがとう !

4

3 に答える 3

1

PHPコードは、datasnapサーバーにGETリクエストを発行します。JSONObjectのような複雑なパラメータの場合、メッセージ本文として適切なJSONObjectを指定してPOSTまたはPUTHTTP動詞を使用する必要があります。 http://docwiki.embarcadero.com/RADStudio/en/DataSnap_REST_Messaging_Protocol#Parameters_in_the_URL

したがって、POSTリクエストをdatasnapサーバーに送信する必要があります。詳細については、ドキュメントを確認してください。 http://docwiki.embarcadero.com/RADStudio/en/DataSnap_REST_Messaging_Protocol

于 2011-01-29T22:37:19.323 に答える
1

このPHP コードDataSnap - Delphi XE2で動作します

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json", "Content-Type: text/xml; charset=utf-8"));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'user:pass');
curl_setopt($ch, CURLOPT_URL, $param_url);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
于 2012-12-31T17:59:29.560 に答える
0

私の答えのリンクの下をたどってください

http://docwiki.embarcadero.com/RADStudio/en/Talk:DataSnap_REST_Messaging_Protocol

于 2011-02-02T16:35:32.713 に答える