2012-02-07 16 views
7

Web sitemin belirli bir bölümünü ziyaret eden kullanıcıların bazı bilgilerini yakalarım ve tek bir hata alıyorum. Aşağıdakileri yapan bir kod bölümüm var.HttpRequestBase.UserHostAddress atma hatası

string userIp = request.UserHostAddress; 

İstek değişkeni bir HttpRequestBase'dir. Zaman zaman bu sadece iyi çalışıyor ve ben IP alırım - diğer zamanlarda bir hata atar ki nasıl korunacağından emin değilim. Bu benim hata günlüğümden.

"Değer beklenen aralıkta girmemektedir. System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal (Int32 errorCode, ıntptr errorInfo) de System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal (String name) de"

Görünüşe göre, bir sayfaya ilk gittiğimde gayet iyi çalışıyor, bir yenileme yaparsam hata atılıyor ya da aynı değişkeni yakalayan başka bir sayfaya geçiyor.

+0

Bunun size yardımcı olup olmadığına bakın: http://stackoverflow.com/questions/650357/httprequest-servervariables-throws-argumentexception-in-wcf-with-iis7 –

+0

Bunu yayınlamadan önce okudum. Bu burada geçerli değil. Sözleşmeyi OneWay'e ayarlamıyorum. – Mitch

+0

'System.Web.HttpContext.Current.Request.UserHostAddress' deneyebilirsiniz - sadece HttpRequestBase HttpRequest –

cevap

6

Bu tam sorunu günlüğümle yaptım. Bağımlılık enjeksiyonunu kullanıyorum, şüphelendiğin gibi.

Durumumda, bu hatayı alıyorum çünkü kaydediciyi istek kapsamına bağlamadım. Yani, istekleri arasında yaşıyor ve HttpContext özelliklerinin bazılarını sürdürüyordu, ancak IIS ile konuşanlar için istisnalar atıyordu.

Ninject'i kullandığımdan beri, bu yalnızca InRequestScope() yöntemini ekleyerek, Ninject.Web.Common ad boşluğundan eklememe bağlanmasıydı. Kısacası yılında

: IIS ve hangi için sıraya belirli özellikleri, istek artık geçerli olmadığında bu istisna HttpContext bir bayat örneği için atılmış gibi görünüyor, erişilir.

Bu yardımcı olur umarım!

p.s. NLog, yazacağınız herhangi bir kayıt cihazından daha iyidir. Veya, sadece istisnalar istiyorsanız, ELMAH'a bırakın.

+1

Bu hatayı biraz farklı bir durumdan aldım. Bir ASMX web servisinde, uzun süreli çalışmayla ilgili bir takım çalışmalar yaptım ve ana işlemi yavaşlatmadan yapmak istedim. Bu yüzden 'Task.Factory.StartNew' ile çalıştırdım. Son işlemin HttpContext'e erişim gerektirdiğinden, HttpContext.Current'ı Görev'i başlatan lambdadan aptalca ayarlamıştım. ServerVariables'e erişmeye çalışırken çöktü. –