मेरे पास "एएसपी.नेट वी 4.0 क्लासिक" एप्लिकेशन पूल में विंडोज 7/आईआईएस 7.5 पर चल रहा एक एएसपी.NET 4.0 एप्लिकेशन है, जिसे नेटवर्क सेवा के रूप में चलाने के लिए कॉन्फ़िगर किया गया है। एप्लिकेशन में Application_EndRequest
हैंडलर है जो स्थानीय SQL सर्वर इंस्टेंस से कनेक्ट होता है। SQL कनेक्शन स्ट्रिंग Integrated Security=SSPI
निर्दिष्ट करती है। Web.config <identity impersonate="true" />
है।एएसपी.नेट एनटी प्राधिकरण IUSR का प्रतिरूपण करता है लेकिन प्रतिरूपण अक्षम है। एएसपी.नेट बग?
जब मैं http://localhost/TestSite/
पर ब्राउज़ करें, निम्न अपवाद फेंक दिया जाता है:
System.Data.SqlClient.SqlException (0x80131904): Login failed for user 'NT AUTHORITY\IUSR'.
...
at System.Data.SqlClient.SqlConnection.Open()
at Global.Application_EndRequest(Object sender, EventArgs e)
यह अपवाद नहीं जब मैं http://localhost/TestSite/default.aspx
(डिफ़ॉल्ट दस्तावेज़ आईआईएस में विन्यस्त) या किसी अन्य .aspx पृष्ठ पर ब्राउज़ फेंक दिया है, उन मामलों में एप्लिकेशन SQL सर्वर से "एनटी प्राधिकरण \ नेटवर्क्स सेवा" के रूप में सही ढंग से कनेक्ट होता है, जो एक वैध लॉगिन है।
प्रतिरूपण अक्षम होने पर एएसपी.NET EndRequest में "एनटी प्राधिकरण \ IUSR" का प्रतिरूपण क्यों करेगा? क्या यह एएसपी.नेट में एक बग है?
ThreadId=3 http://localhost/TestSite/ BeginRequest Impersonating=False
ThreadId=3 http://localhost/TestSite/ PreRequestHandlerExecute Impersonating=False
ThreadId=7 http://localhost/TestSite/default.aspx BeginRequest Impersonating=False
ThreadId=7 http://localhost/TestSite/default.aspx PreRequestHandlerExecute Impersonating=False
ThreadId=7 http://localhost/TestSite/default.aspx PostRequestHandlerExecute Impersonating=False
ThreadId=7 http://localhost/TestSite/default.aspx EndRequest Impersonating=False
ThreadId=7 http://localhost/TestSite/ PostRequestHandlerExecute Impersonating=True
ThreadId=7 http://localhost/TestSite/ EndRequest Impersonating=True
System.Data.SqlClient.SqlException (0x80131904): Login failed for user 'NT AUTHORITY\IUSR'.
...
at System.Data.SqlClient.SqlConnection.Open()
at Global.Application_EndRequest(Object sender, EventArgs e)
ध्यान दें कि TestSite/
के लिए एक अनुरोध (जो DefaultHttpHandler
को मैप किया है) लगता है:
public class Global : HttpApplication
{
public Global()
{
this.BeginRequest += delegate { Log("BeginRequest"); };
this.PreRequestHandlerExecute += delegate { Log("PreRequestHandlerExecute"); };
this.PostRequestHandlerExecute += delegate { Log("PostRequestHandlerExecute"); };
this.EndRequest += delegate { Log("EndRequest"); };
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
try
{
using (SqlConnection connection = new SqlConnection("Server=.;Integrated Security=SSPI"))
{
connection.Open();
}
}
catch (Exception ex)
{
Trace.WriteLine(ex);
}
}
private static void Log(string eventName)
{
HttpContext context = HttpContext.Current;
Type impersonationContextType = typeof(HttpContext).Assembly.GetType("System.Web.ImpersonationContext", true);
Trace.WriteLine(string.Format("ThreadId={0} {1} {2} Impersonating={3}",
Thread.CurrentThread.ManagedThreadId,
context.Request.Url,
eventName,
impersonationContextType.InvokeMember("CurrentThreadTokenExists", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetProperty, null, context, null)));
}
}
यहाँ का पता लगाने उत्पादन है:
निम्नलिखित Global.asax.cs फ़ाइल समस्या को दर्शाता है घोंसलाTestSite/default.aspx
(जिसे ASP.default_aspx
पर मैप किया गया है) का अनुरोध करने के लिए। ASP.NET TestSite/default.aspx
को संसाधित करने के बाद, यह TestSite/
पर अनुरोध संसाधित करते समय "एनटी प्राधिकरण \ IUSR" का प्रतिरूपण करता है।
अद्यतन: मैंने इस समस्या को Microsoft Connect पर सबमिट कर दिया है।
http://msdn.microsoft.com/en-us/library/ms998320.aspx – Arcturus
किस भाग का प्रयास करें? मेरे पास पहले से ही आईआईएस और एसक्यूएल सर्वर में नेटवर्क सेवा स्थापित है। –