The request failed with HTTP status 401: Unauthorized.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.Exception Details: System.Net.WebException: The request failed with HTTP status 401: Unauthorized.
Source Error:
Line 51:
Line 52: // Set the report parameters for the report
Line 53: ReportViewer1.ServerReport.SetParameters(
- เรื่องมีอยู่ว่า developer คนก่อนเค้าเขียนใช้ reporting service ในการออกรายงาน
- ระบบอยู่เครื่อง และ reporting service อยู่อีกเครื่อง
- แต่พอไปเปลี่ยน รหัสผ่าน (หรือ ตั้ง security ไม่แน่ใจสักอย่างเนี๋ยแหละ) ของ user ที่เครื่อง reporting service ทำให้รันราย error ซะงั้น
- เราก็ไม่มีความรู้เรื่อง reporting service ทั้งแบบ Server หรือ Local Mode ซะด้วย ซวยล่ะตู
- แล้วจะแก้ไงล่ะนี้ โชคดี ท่าน มีเทพมาช่วยไว้ได้ เค้าให้โค้ดมา 1 คลาส serialize และ อีกหนึ่ง statement
อันนี้เป็น error ของเราจริง ด้านบนมาจากอ้างอิง
โค้ดสำหรับ authen แบบ remote reporting service
ReportViewer1.ServerReport.ReportServerCredentials = new MyReportServerCredentials2("user", "password", "domain");ส่วนของ class แบบ serialize
[Serializable()]
public sealed class MyReportServerCredentials2 : IReportServerCredentials
{
#region IReportServerCredentials Members
private string credUser;
private string credPassword;
private string credDomain;
public MyReportServerCredentials2(string user, string password, string domain)
{
credUser = user;
credPassword = password;
credDomain = domain;
}
public WindowsIdentity ImpersonationUser
{
//Use the default windows user. Credentials will be
//provided by the NetworkCredentials property.
get { return null; }
}
public ICredentials NetworkCredentials
{
get
{
//Read the user information from the web.config file.
//By reading the information on demand instead of storing
//it, the credentials will not be stored in session,
//reducing the vulnerable surface area to the web.config
//file, which can be secured with an ACL.
//User name
string userName = credUser;
//Dim userName As String = _
// ConfigurationManager.AppSettings("MyReportViewerUser")
if ((string.IsNullOrEmpty(userName)))
{
throw new Exception("Missing user name from web.config file");
}
//Password
string password = credPassword;
//Dim password As String = _
// ConfigurationManager.AppSettings("MyReportViewerPassword")
if ((string.IsNullOrEmpty(password)))
{
throw new Exception("Missing password from web.config file");
}
//Domain
string domain = credDomain;
//Dim domain As String = _
// ConfigurationManager.AppSettings("MyReportViewerDomain")
if ((string.IsNullOrEmpty(domain)))
{
throw new Exception("Missing domain from web.config file");
}
return new NetworkCredential(userName, password, domain);
}
}
public bool GetFormsCredentials(out Cookie authCookie, out string userName, out string password, out string authority)
{
authCookie = null;
userName = null;
password = null;
authority = null;
//Not using form credentials
return false;
}
#endregion
}
สรุป
- เพิ่มโค้ดสำหรับ authen อันนี้แหละ ReportViewer1.ServerReport.ReportServerCredentials = new MyReportServerCredentials2("user", "password", "domain");
- และเพิ่ม class MyReportServerCredentials2 เข้าไปในนั้นด้วย
- แต่ใน อ้างอิงเค้ายัง error นะแต่เราใช้โค้ด error เค้ามาช่วยแก้ปัญหาเราซะงั้น งง
- อีกอย่าง อันนี้เป็นแค่หนทางการแก้ปัญหา ทางหนึ่งเท่านั้น error อาจเป็นแบบเดียวกัน แต่สาเหตุอาจจะต่างกันออก ไปดัง อ้างอิง ที่เค้าเป็นปัญหาอย่างอื่น ซึ่งเราเอาโค้ดที่ error มาใช้แก้ปัญหาเราได้ซะงั้น แต่ตอนนี้ยังหาทางแก้ แบบอื่นที่สั้นๆ ไม่ได้เลย เขียนไปแบบนี้พรางๆ ก่อน
อ้างอิง
No comments:
Post a Comment