2012-02-07 16 views
7

私のウェブサイトの特定のセクションにアクセスし、奇妙なエラーが発生しているユーザーに関する情報の一部を取得しています。私は次のことを行うコードセクションを持っています。HttpRequestBase.UserHostAddress throwing error

string userIp = request.UserHostAddress; 

要求変数はHttpRequestBaseです。時にはこれはうまく動作し、私はIPを取得する - それは私が保護する方法についてはわからないエラーをスローする他の回。これは私のエラーログからのものです。

"値が予想される範囲内に収まっていない。System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(のInt32 errorCodeを、のIntPtrのerrorInfo) でSystem.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternalで(文字列名)"

最初にページに移動するとうまくいきますが、リフレッシュするとエラーがスローされたり、同じ変数をキャプチャする別のページにすばやく移動したりするようです。

+0

これが役立つかどうかを確認してください。http://stackoverflow.com/questions/650357/httprequest-servervariables-throws-argumentexception-in-wcf-with-iis7 –

+0

投稿前にその記事を読んでいます。それはここでは当てはまりません。私はOneWayに契約を設定していません。 – Mitch

+0

「System.Web.HttpContext.Current.Request.UserHostAddress」を試すことができますか?HttpRequestBaseがHttpRequestと同じ手順を実行しない場合に備えて、 –

答えて

6

私のロガーでこの問題が発生しました。私は依存症注射を使用しています、私はあなたがいると思っています。

私の場合、リクエストスコープにロガーをバインドしていなかったため、このエラーが発生しました。だから、それは要求の間に生きていて、HttpContextのプロパティの一部を維持していましたが、IISと通信しているものには例外がスローされていました。

私はNinjectを使用しているので、これは単にメソッドをNinject.Web.Common名前空間から私のバインディングに追加するだけの問題でした。短いで

:IISおよびれるマーシャリングされた特定のプロパティは、要求がもはや有効である場合、この例外はHttpContextの失効例えばスローされるように思わない、アクセスされます。

希望に役立ちます!

p.s. NLogは、あなたが書くすべてのロガーより優れています。あるいは、ただ例外を望むなら、ELMAHをドロップしてください。

+1

このエラーは多少異なる状況から発生しています。 ASMX Webサービスでは、長期的に実行される可能性があるいくつかの仕上げ作業がありました。メイン操作の速度を落とさずに実行したいと思っていました。だから私は 'Task.Factory.StartNew'でそれを走らせました。仕上げ作業にはHttpContextへのアクセスが必要なので、私は愚かにタスクを開始したラムダからHttpContext.Currentを設定しました。 ServerVariablesにアクセスしようとするとクラッシュします。 –