2009-02-26 6 views
0

ASP.NET 2.0 응용 프로그램의 연결 문자열에 문제가 있습니다. ConnectionString 속성이 초기화되지 않았습니다. 임의로 그리고 간헐적으로 어떤 이유로도 발생하지 않는 문제가 있습니다.ASP.NET 연결 문자열

내 연결 문자열은 실제로 웹 서비스에서 오는 것입니다. 사용자 종류에 따라 다른 종류의 연결 문자열이 제공되기 때문입니다. 내가 지금까지했던 어떤

은 다음과 같이 진행됩니다

내가 마스터 페이지 (mstr.page) 뒤에 해당 코드 (mstr.page.vb)가 있습니다. 내 마스터 페이지에서

, 난에서 공공 공유 기능을 사용, 즉 지금

Session("ConnString") = "RetrievedConnectionString" 

내 페이지 중 하나에, 우리가 page1.aspx.vb 말을하자, 처음에는 연결 문자열을 검색하고 세션 변수에 동일한 저장 클래스 (MyClass.vb)와 내 page1.aspx.vb에 그것을 사용합니다. 참조

일부 코드 : 나는 위의 코드를 배치 한

[MyClass.vb] 
Imports System.Web 

NameSpace ClassNameSpace 
    Public Class Admin 
    Protected Shared da as New DataAccess() 

    Public Shared Function MYFunction() as String 
     'Execute some sql statements here, using the DataAccess 
     stringToReturn = Ctype(da.ExecuteScalar("SQLCommand"), String) 
     Return stringToReturn 
    End Function 
    End Class 
End NameSpace 

[DataAccessClass.vb] 
Public Class DataAccess() 
    Private m_ConStr As String = "" 

    Public Sub New() 
    m_ConStr = HttpContext.Current.Session("ConnString") 
    End Sub 

    'Some methods for SQL statement execution (ExecuteQuery, ExecuteScalar) 
End Class 

[Page1.aspx.vb] 
Imports ClassNameSpace 

Protected Sub Page_Load(....) Handles Me.Load 
    Dim strValue as String = Admin.MyFunction() 
End Sub 

당신에게 일을 진행하는 방법에 대한 몇 가지 거친 아이디어를 표시합니다.

데이터 액세스 클래스에서 연결 문자열이 값 (공백 또는 없음)을 잃어 버렸기 때문에 기본적으로 Admin.MyFunction() 기능이 실패합니다.

이것은 꽤 오랫동안 나를 괴롭혔습니다.

누군가가 올바른 방향으로이를 해결할 수 있기를 바랍니다. 기본적으로 웹 응용 프로그램을 방문하는 각 사용자가 검색하는 연결 문자열을 항상 유지하고 어디서나 사용할 수 있습니다. 세션 변수는 ASP.NET이 프로세스를 재활용 할 때 세션이 손실되므로 적합하지 않습니다.

그런데 웹 서비스에서 마스터 페이지를 통해 초기에 connectionstring을 검색하고 있습니다. 조건이 세션 변수가 손실되면 데이터 액세스 클래스에서 동일한 검색 함수를 배치하려고했지만 내 응용 프로그램이 재활용 프로세스 중에 웹 서비스에 연결할 수 없다고 생각합니다.

모든 조언을 주시면 감사하겠습니다. 이에

업데이트 :

나는 이렇게 내가 다시 원점으로 오전, 분명히 내가 사용하고 일부 DLL을 직렬화 할 수없는 세션 변수 사용하려고 및 주 서버에 모드를 설정할 수 있지만.

더 좋은 방법이 있나요?

답변

1

확인할 사항 중 하나는 세션이 폐쇄되는 것입니다. (기본값) 메모리 내 세션을 사용하는 경우 ASP.NET 작업자 프로세스가 재활용 될 때마다 세션이 종료됩니다. 이로 인해 문제가 발생하는 경우 IIS에서 ASP.NET SessionServer를 사용하거나 세션 저장소로 SQL Server를 사용해야 할 수 있습니다.

+0

내가 연결 문자열에 대한 값을 취득하기 전에 세션 변수를 확인 할. Null 또는 Nothing 또는 Empty이면 웹 서비스에서 연결 문자열을 다시 검색하려고 시도하지만 재활용이 진행 중이므로 웹 서비스에도 액세스 할 수 없습니다. – Batuta

0

이것은 내가 경험했던 것과 정확히 똑같은 문제이며 세션 변수가 죽어서 연결 문자열을 제대로 초기화 할 수 없었습니다.

+0

그래서 어떤 해결책을하셨습니까? 감사. – Batuta

+0

세션 시간 제한을 늘리고 web.config에서 세션 모드가 InProc로 설정되었는지 확인했습니다. 지금까지 일한 것 같습니다. 아마 내가 ASP.Net 프로그래머조차별로 좋지 않기 때문에 아마도 더 좋은 방법 일 것입니다. –

+0

모든 페이지에서 연결 문자열을 초기화 했으므로 초기화되지 않았습니다. –

0

왜 앱에서 하나의 연결 문자열을 사용할 수 없습니까? 왜 웹 서비스를 통해 연결 문자열이 필요합니까? 전체 프로세스에 엄청난 대기 시간을 추가합니다. 아마도 데이터베이스의 데이터 보안으로 무언가를해야만한다고 가정합니다.

이있는 경우 폴백/기본 연결 문자열을 사용할 수 없습니까? 일부 오류 처리와 함께 세션에서 꺼내려고 시도하는 코드를 감싸고 실패하면 기본값으로 되돌립니다.

+0

일부 stup * d 녀석은 실제로 이런 종류의 솔루션을 제안했고 실제로 웹 서비스에서 연결 문자열을 얻는 것 외에는 선택의 여지가 없습니다. 연결 문자열은 완전히 다른 복잡성 집합으로, 한 사용자가 액세스 한 페이지를 기반으로 10 개의 다른 연결 문자열을 가질 수 있습니다. – Batuta

+0

가끔 이상적인 해결책은 앞에서 제기 한 나쁜 결정을 뒤집는 것입니다. 적시에 올바른 결정을 내릴 때 프로그래밍 (그리고 인생!)은 쉽습니다. – dfasdljkhfaskldjhfasklhf

0

웹 서비스와 웹 앱을 다른 앱 풀에 배치하려고합니다. 그런 다음 웹 응용 프로그램 풀의 시간 제한을 늘리십시오.

+0

웹 서비스 및 웹 응용 프로그램 풀이 이미 다른 컴퓨터에 있습니다. 시간 초과도 증가했지만 ASP WP가 재활용되면 연결 문자열이 손실됩니다. – Batuta

1

가능한 한이 유형의 세션에 대한 세션 사용을 제한하려고합니다. 연결 문자열을 저장하기 위해 Web.Config를 사용하면 언제든지 액세스 할 수 있으며 세션과 같이 만료되지는 않습니다. 이 응용 프로그램 인스턴스의 모든 사용자가 같은 경우, 당신은 또한 정적 데이터 액세스 클래스를 가진 고려할 수

...

+0

앞서 언급 한 것처럼 각 사용자에게는 웹 서비스에서 제공하는 고유 한 연결 문자열 속성이 있습니다. 이 이유 때문에 web.config에서 연결 문자열을 하드 코딩 할 수 없습니다. – Batuta

+0

연결 문자열에 어떤 차이가 있습니까? 표준 연결 문자열이 있다면 사용자를 위해 언제든지 수정할 수 있습니다. – RSolberg

+0

기본/표준 연결 문자열을 사용하고 필요에 따라 수정하는 방법이 마음에 듭니다. – dfasdljkhfaskldjhfasklhf