데이터베이스에 액세스 할 때 응용 프로그램이 충돌 함

asp.net-mvc c# dapper iis windows-server-2012-r2

문제

내 PC에서 잘 실행되는 작은 웹 응용 프로그램이 있지만 서버에 게시하면 데이터베이스를 쿼리 할 때 응용 프로그램이 충돌합니다.

나는이 줄로 좁혔다.

output = (List<Pallet>)db.Query<Pallet>(query, args);

Dapper 를 사용하여 테이블을 쿼리하는 곳.

일반적으로 오류가 발생하면 공유 ASP 오류 페이지로 이동하지만 여기에서 Chrome This site can’t be reached ERR_CONNECTION_RESETThis site can’t be reached ERR_CONNECTION_RESET .

또한 이벤트 뷰어에서 이벤트 ID가 100 응용 프로그램 오류가 나타납니다.

Faulting application name: w3wp.exe, version: 8.0.9200.16384, time stamp: 0x5010885f
Faulting module name: mso30win32client.dll, version: 16.0.4266.1001, time stamp: 0x55ba12f1
Exception code: 0xc0000005
Fault offset: 0x00088092
Faulting process id: 0x35a4
Faulting application start time: 0x01d2cce79551069b
Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Faulting module path: C:\Program Files (x86)\Common Files\Microsoft Shared\Office16\mso30win32client.dll
Report Id: f044a40f-38da-11e7-9402-a4bf011a3e0b
Faulting package full name: 
Faulting package-relative application ID: 

GrvController 의 메소드는 다음과 같습니다.

public ActionResult Details(string grvNumber)
{
    var pallets = access.GetPallets(grvNumber);

    var grv = new Grv(pallets);
    Session["grv"] = grv;

    return View(grv);
}

그리고 Access.GetPallets :

internal List<Pallet> GetPallets(string grvNumber)
{
    using (var db = new OleDbConnection(ConnectionString))
    {
        var query = Constants.GetGrvQuery;
        var args = new DynamicParameters();
        args.Add("@grv", grvNumber);

        var output = new List<Pallet>();
        try
        {
            output = (List<Pallet>)db.Query<Pallet>(query, args);
        }
        catch (Exception e)
        {
            Log.Debug(e.Message);
        }
        return output;
    }
}

Exception e 는 결코 잡히지 않으며 지연 후에 응용 프로그램이 충돌합니다.

아무도 이것을 전에 경험 한 적이 있습니까? 누구든지이 디버깅에 대해 어떻게 알 수 있습니까?

미리 감사드립니다.


최신 정보

GetPallets 메서드를 변경하여 Dapper GetPallets 문제인지 확인하려고 시도했지만 OleDbConnection.Open() 호출 할 때 같은 일을합니다.

또한 이벤트 뷰어에서이 응용 프로그램 오류가 계속 발생하는 것으로 나타났습니다.

Login failed for user 'NT AUTHORITY\NETWORK SERVICE'. Reason: Could not find a login matching the name provided. [CLIENT: <named pipe>]

원본 MSSQL $ MICROSOFT ## WID . 이것이 어떻게 든 관련되어있을 수 있습니까?

내 응용 프로그램은 AD에서 생성 된 서비스 계정을 사용하도록 설정됩니다.


업데이트 2

오스틴 (Austins)의 의견에 감사 드리며, 내부 MS 데이터베이스에 대한 일종의 사용 권한 문제로 더 좁혀졌습니다. 내 serviceQC 계정 대신 administrator 로 실행되도록 웹 응용 프로그램을 변경하면 아무런 문제없이 데이터베이스에 액세스 할 수 있습니다.

그러나 이것은 물론 좋은 습관이 아닙니다. 나는에서 모든 그룹 추가하는 시도 administrator 에 AD에서 탭의 "회원" serviceQC 하지만 도움이되지 않습니다. 누구든지 특정 사용자에 대해 MSSQL $ MICROSOFT ## WID 데이터베이스에 대한 액세스 권한을 부여 할 수있는 방법을 알고 있습니까?

수락 된 답변

몇 시간 동안이 문제를 해결 한 후 IIS에서 다음 옵션을 발견했습니다.

Application Pool -> Advanced Settings -> Load User Profile

설명이있는 곳

[loadUserProfile]이 설정은 IIS가 응용 프로그램 풀 ID에 대한 사용자 프로필을로드할지 여부를 지정합니다. 이 값이 true이면 IIS는 응용 프로그램 풀 ID에 대한 사용자 프로필을로드합니다. 응용 프로그램 풀 ID에 대한 사용자 프로필을로드하지 않는 IIS 6.0 동작이 필요할 때이 값을 false로 설정합니다.

이 값을 True 설정하면 이제 내 응용 프로그램이 데이터베이스와 상호 작용할 수 있습니다.

이상하게,이 다시 false로 변경 한 후 (나는 이것이 원인인지 확인해야했습니다.) 이제 응용 프로그램이 더 이상 충돌하지 않고 데이터베이스에서 빈 List<Pallet> 을 반환합니다 (오류가 발생하지 않는 것 같습니다) .

나는 어떤 일이 벌어지고 있는지에 대해 설명하는 이 대답 을 발견했다. 그러나 주석 중 하나가 언급 할 때,이 옵션을 설정하는 것은 아마 약간의 보안 및 성능 영향을 미친다.

내 문제를 해결할 다른 방법이 있어야한다고 가정하고 있지만 지금은해야 할 일입니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow