用户' NT AUTHORITY \ NETWORK SERVICE'登录失败。访问本地数据库时

时间:2015-07-17 07:02:40

标签: c# web database-connection connection-string local-database

我不知道......为什么会这样。 在调试模式下运行良好。 但是,现在我正在尝试在IIS Web服务器中运行我的项目 它运行不好。 我可以访问我项目的主页面。但是当我尝试访问本地数据库时,会出现以下错误。 这是我的日志文件和代码:

            catch (Exception ex)
            {
                Debug.WriteLine("Error in integration: " + ex.Message);
                Debug.Flush();

                StreamWriter file2 = new StreamWriter("c:\\resources\\file.log", true);
                file2.WriteLine("아님여기?"+ex.Message);
                file2.Close(); //디버깅 계속................
            }

在这个捕获中我有以下错误:

provider:Named Pipes Provider,错误:40 - 无法打开与SQL Server的连接

很抱歉我无法解释哪一行产生了这个异常,因为调试模式中没有异常...

以下是页面加载的代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        this.Page.Form.Enctype = "multipart/form-data";

        WA = Request.QueryString["WA"];
        if (string.IsNullOrEmpty(WA)) WA = "off";
        string qstr = null;
        qstr = Request.QueryString["vCnt"]; //ㅇㅈ이파라메터 들은 어디서...??
        if (qstr != null && qstr != "") vCnt = Int32.Parse(qstr);

        if (!IsPostBack)
        {
            Keywords = Request.QueryString["keywords"];  //ㅇㅈ search main -> searh 버튼 클릭
            VideoSearch = Request.QueryString["VideoSearch"];//ㅇㅈ ~^~^~

            // 스마트폰에서 포스팅 되었을 때
            if (Request.UserAgent.Contains("Android"))
            {
                if (Request.Cookies["VIDEOSEARCH"] != null && Request.Cookies["VIDEOSEARCH"].Value != "")
                {
                    VideoSearch = Request.Cookies["VIDEOSEARCH"].Value;
                    MAM.Models.Utils.CookieManager("VIDEOSEARCH", "");
                }
            }

            if (!String.IsNullOrEmpty(Keywords) && !Keywords.Contains("null")) SearchTextbox2.Text = Keywords;

            Debug.WriteLine("search text is " + SearchTextbox2.Text);
            Debug.Flush();

            try
            {
                if (!string.IsNullOrEmpty(VideoSearch))
                {

                    //ㅇㅈ DNA를 추출하여 유사 동영상을 돌려받음.
                    string results = RetrieveDNAfromVideo(System.Web.HttpUtility.UrlDecode(VideoSearch)/*video name*/);

                    string[] lines = results.Split(new string[] { "\r\n" }, StringSplitOptions.None);
                    vSearchResults = new List<VSearchResult>();
                    foreach (string line in lines)
                    {
                        string[] words = line.Split(',');
                        VSearchResult vSearchResult = new VSearchResult();
                        vSearchResult.VideoID = Int32.Parse(words[0]);
                        vSearchResult.idx = Int32.Parse(words[1]);
                        vSearchResult.RGBdifferce = Int32.Parse(words[2]);
                        vSearchResults.Add(vSearchResult);
                    } //ㅇㅈ vSearchResults : RetrieveDNAfromVideo가 알려준유사동영상정보
                    MAMDataContext db = new MAMDataContext();
                    List<int> VideoIDs = (List<int>)vSearchResults.Select(v => v.VideoID).ToList();
                    //vdo = (List<Video>)(from a in db.Video
                    //                    join b in vSearchResults
                    //                        on a.id equals b.VideoID
                    //                    orderby b.RGBdifferce
                    //                    select a).ToList();
                    vdo = (List<Video>)(from a in db.Videos
                                        where VideoIDs.Contains(a.id)
                                        select a).ToList();  //ㅇㅈ vdo는 결국, RetrieveDNAfromVideo가 알려준유사동영상정보-> id가 같은동영상들
                    vSearchResults2 = new List<VSearchResult2>();
                    VSearchResult v1 = null;
                    foreach (Video v in vdo)
                    {
                        VSearchResult2 v2 = new VSearchResult2();
                        v2.VideoID = v.id;
                        v2.overview = v.overview;
                        v2.title = v.title;
                        v2.filename720 = v.filename720;
                        v2.filename360 = v.filename360;
                        v1 = vSearchResults.Where(t => t.VideoID == v.id).OrderBy(t => t.RGBdifferce).FirstOrDefault();//ㅇㅈ ㅇㄱㅁㅇ
                        // ㅇㅈ RetrieveDNAfromVideo가 알려준유사동영상정보-> id가 같은동영상들[-> RGBdifferce가 가장작은 애]  [] 무슨의미?? 

                        v2.idx = v1.idx;
                        v2.RGBdifferce = v1.RGBdifferce;
                        vSearchResults2.Add(v2);
                    }
                    Debug.WriteLine("Video Serach done");
                    Debug.Flush();
                }
                if (!string.IsNullOrEmpty(Keywords))
                {
                    string ret2 = null;
                    string str1 = null;
                    if (string.IsNullOrEmpty(Keywords))
                    {
                        Keywords = SearchTextbox2.Text;
                    }
                    if (string.IsNullOrEmpty(str1)) str1 = Keywords; //ㅇㅈ str1 은 질의의도??
                    string[] searchTextArray = str1.Split(' ');
                    int cnt1 = searchTextArray.Count();
                    string st1 = ""; string st2 = ""; string st3 = "";
                    if (cnt1 > 0) st1 = searchTextArray[0];
                    if (cnt1 > 1) st2 = searchTextArray[1];
                    if (cnt1 > 2) st3 = searchTextArray[2];

                    MAMDataContext db = new MAMDataContext();
                    vdo = (List<Video>)db.Videos.Where(v => v.overview.Contains(st1)
                                            || (cnt1 > 1 ? v.overview.Contains(st2) : false)
                                            || (cnt1 > 2 ? v.overview.Contains(st3) : false)).ToList();//ㅇㅈ 검색어를 overview에 가지고 있는 동영상 리스트

                    vSearchResults2 = new List<VSearchResult2>();
                    foreach (Video v in vdo)
                    {
                        VSearchResult2 v2 = new VSearchResult2();
                        v2.VideoID = v.id;
                        v2.overview = v.overview;
                        v2.title = v.title;
                        v2.filename720 = v.filename720;
                        v2.filename360 = v.filename360;
                        v2.idx = 0;
                        v2.RGBdifferce = 0;
                        vSearchResults2.Add(v2);
                    }
                    Debug.WriteLine("Video Search");
                }

            }
            catch (Exception ex)
            {
                Debug.WriteLine("Error in integration: " + ex.Message);
                Debug.Flush();

                StreamWriter file2 = new StreamWriter("c:\\resources\\file.log", true);
                file2.WriteLine(ex.Message);
                file2.Close(); //디버깅 계속................
            }

            Debug.WriteLine("Search End");
        }
        if (fUpload.PostedFile != null)    //ㅇㅈ 
        {
            fileupload1();

        }
        else
        {
        }
    }

1 个答案:

答案 0 :(得分:3)

这是猜测,因为您没有提供关键信息:连接字符串。

我的猜测是应用程序正在使用集成身份验证,因此调试对数据库的访问是使用您的凭据完成的:作为开发人员,您可能几乎可以在数据库上执行所有操作,以便应用程序正常工作。

部署应用程序时,使用用于运行应用程序本身的应用程序池的凭据执行对数据库的登录。

作为测试,您可以更改iis服务器上应用程序池的用户,以使用在数据库上启用的帐户并重试登录。

有两种解决方案:
- 配置应用程序池以使用允许与db交互的特定Windows用户
- 更改连接字符串以作为sql用户登录到db(允许与db交互)