撮原HTTPポストデータ中に例外
-
05-09-2019 - |
質問
私は、WCFサービスを開催IIS/ASP.益を受け入れるHTTPポスト下記のグラフに示すように、ポスト の直列化されたオブジェクト。
すでにクライアントに送不正な要求の例ではありませんがを直列化するオブジェクトが正しくしたいログにメッセージを送ります。
いま使用ELMAH捉え独自のレンダリングメカニズム例外は、単に取り付け後のデータが最も簡単なオプションです。
を取得できます現在のHttpContext時の例外でも、こうしたなだけが含まれますのHTTPヘッダ情報。
私の質問は、この:あの撮影は元のHTTP POSTがありますか。または、失敗した-より良い方法(リバースプロキシとして)の抽出のために、入力エラーの原因となった?
編集:で明らかに、パケット-レベルを常にいなだけじゃない傷を付けても適しています。私た後、溶液かリシーを導入することができるサーバでは、お客様の外に当社の管理能力をモニタです。
編集#2:提案されたアクセスします。InputStream-この動作しない場しようとしていることに読み込WCFを読み依頼のストリームです。
サンプルコードのかっこはこちらです。
StringBuilder log = new StringBuilder();
var request = HttpContext.Current.Request;
if (request.InputStream != null)
{
log.AppendLine(string.Format("request.InputStream.Position = \"{0}\"", request.InputStream.Position));
if (request.InputStream.Position != 0)
{
request.InputStream.Seek(0, System.IO.SeekOrigin.Begin);
}
using (StreamReader sr = new StreamReader(request.InputStream))
{
log.AppendLine(string.Format("Original Input: \"{0}\"", sr.ReadToEnd()));
}
}
else
{
log.AppendLine("request.Inputstream = null");
}
log.ToString();
出力のログです。ToString()は:
request.InputStream.Position = "0" Original Input: ""
解決
になっていくサービスの要求を処理しないご用意しております。
しかし...きを添付して メッセージ検査.メッセージ検査できると、怒のメッセージの手元に届く前に、運転になります。することができ、バッファのコピーメッセージをコピーすることにOperationContext.ます。
醜いハッキングはもちろんのこと、このままではメモリの天井があり、現在の二つのメッセージが浮かぶつべます。
他のヒント
あなたはSystem.Web.Request.InputStreamプロパティを見ていましたか?それは正確に何をしたい持っている必要があります。
のInputStreamプロパティを "巻き戻し" する方法。
if (Request.InputStream.Position != 0)
{
Request.InputStream.Seek(0, System.IO.SeekOrigin.Begin);
}
あなたがになります別のオプションは、BeginRequestイベントイベントでHttpModuleを持つこの情報をキャプチャしています。私は、WCFはPostAuthenticateEvent後まで要求をピックアップ信じていないので、データがBeginRequestイベントのイベントであるはずです。
ASP.NET(IIS下のASP Webサービス)の下から次のコードは、助けます:
if (request.InputStream.Position != 0)
{
request.InputStream.Seek(0, System.IO.SeekOrigin.Begin);
}
多分違うWCF(それはそれはそれを読んだ後のInputStreamを破棄である)
シオマネキを使用してください。 MSから無料。素晴らしい作品ます。