2011-10-17 14 views
0

私はPHPを経由してC#のアプリに文字列を送信しようとしていますが、ここに私のコードは次のとおりです。のHttpRequest(C#にPHP) - 文字列をデシリアライズ

PHP

//set up variables 
$theData = 'test 
to see if a string can be deserialized'; 
$url = 'http://localhost:5900/'; 
//create the httprequest object     
$httpRequest_OBJ = new httpRequest($url, HTTP_METH_POST, $options); 
//add the raw post data 
$httpRequest_OBJ->setRawPostData ($theData); 
//send the http request 
$result = $httpRequest_OBJ->send(); 

//get the object 
$response = $result->getBody(); 

C#

ここそれが失敗した場合:

var methodRequestSerializer = new XmlSerializer(typeof(MethodRequest)); 
      var methodRequest = methodRequestSerializer.Deserialize(reader) as MethodRequest; 

PHPは次のエラーをバックスロー:

致命的なエラー:C:\ xampp \ htdocs \ httpreq.phpにメッセージ 'Empty or too short HTTP message:' 'が含まれているキャッチされていない' HttpInvalidParamException '例外:39'内部エラー 'HttpRequestException'ヘッダー、データなし)。 C:\ xampp \ htdocs \ httpreq.php:29スタックトレース:#0 C:\ xampp \ htdocs \ httpreq.php(39):HttpRequest-> C:\ xampp \ htdocs \ httpreq.php 39行目にスローされたsend()#1 {main}

ありがとうございました。

+1

通常、あなたはASPX/ASHXファイルにデータを送信していませんか? –

+0

とにかくC#アプリケーションにデータを直接送信して、そのデータを即座に脱灰することができますか? – bobo

+0

C#の 'リーダー'はどこから来たのですか? –

答えて

0

あなたのreadernew StreamReader(context.Request.InputStream)から、私はcontextは、ASP.NET HttpContextオブジェクトであることを仮定している、とのHttpRequestを受信するように、あなたのC#コードを何らかの形で展開されていますと言うとき。

この場合、ストリームにはHTTPリクエストの本文からのバイトだけが含まれます。例の場合、文字列は「文字列を逆シリアル化できるかどうかを確認するための文字列」になります。これは有効なXMLではないので、Deserializeメソッド呼び出しが失敗すると予想されるはずです。

MethodRequestが何であるか、またXMLがシリアル化されたときにインスタンスがどのように見えるのかは教えていません。 HTTP POST要求で送信した文字列がMethodRequestのXMLシリアル化された有効なインスタンスであれば、C#Deserializeメソッド呼び出しが成功すると思います。

あなたがやろうとしていることやその方法の詳細を共有したい場合は、より簡単に対応できるかもしれません。

+0

それを解決するために管理されます。気にしないで。 – bobo