역할 환경을 호출할 때 SHE 예외가 발생하는 이유는 무엇입니까?구성 설정 값("MYKEY")을 가져오시겠습니까?
전화하려고 합니다.RoleEnvironment.GetConfigurationSetting("SOMEKEY")이와 같이:
public partial class AzureBasePage : System.Web.UI.Page
{
protected ChargifyConnect Chargify
{
get {
if (this._chargify == null) {
this._chargify = new ChargifyConnect();
this._chargify.apiKey = RoleEnvironment.GetConfigurationSettingValue("CHARGIFY_API_KEY");
}
return this._chargify;
}
}
private ChargifyConnect _chargify = null;
}
My ServiceConfiguration.cscfg 키는 다음과 같습니다.
<Setting name="CHARGIFY_API_KEY" value="AbCdEfGhIjKlMnOp" />
그리고 나는 다음과 같은 오류를 받습니다.
예외 세부 정보:시스템.런타임.Interop Services.SEHE 예외:외부 구성 요소가 예외를 발생시켰습니다.
[SEHE 예외(0x80004005):외부 구성 요소에서 예외가 발생했습니다.]역할 환경GetConfigurationSettingValueW(UINT16*, UInt16*, UInt32, UInt32*) +0 Microsoft.Windows Azure.서비스 런타임.내부의.InteropRoleManager.GetConfigurationSetting(문자열 이름, String&ret) +92 Microsoft.Windows Azure.서비스 런타임.역할 환경.구성 설정 값 가져오기(문자열 구성 설정 이름) +67 차지C:의 NET.ChargifyAzurePage.get_Chargify():\NetProjects\ChargifyDotNET\Source\충전합니다.NET\ChargifyAzurePage.cs:26 충전.Azure._기본값.C:의 Page_Load(개체 보낸 사람, 이벤트 인수):\NetProjects\ChargifyDotNET\Source\충전합니다.Azure\Default.aspx.vb:8 시스템.웹.UI.컨트롤.OnLoad(이벤트 인수) +99 시스템.웹.UI.컨트롤.재귀 로드() +50 시스템.웹.UI.페이지.ProcessRequestMain(부울에는 AsyncPoint 이전 단계 포함, 부울에는 AsyncPoint 이후 단계 포함) +627
dev fabric 또는 Azure fabric에서 실행되지 않는 경우 RoleEnvironment에 액세스하려고 하면 SEHE 예외가 발생합니다.저는 당신이 실수로 asp.net 개발 서버에서 웹사이트를 실행하고 있다고 생각합니다. 즉, 당신이 개발 패브릭에 속해 있지 않다는 것을 의미합니다(SHE 예외가 발생할 것이라는 것을 확인했습니다).즉, 웹 사이트 프로젝트를 시작 프로젝트로 설정했거나 마우스 오른쪽 단추로 클릭하여 실행하도록 지시했습니다.
클라우드 프로젝트 자체를 시작 프로젝트로 설정해야 합니다. 그러면 기본적으로 포트 81에서 실행 중인 웹 사이트가 표시됩니다.클라우드 프로젝트는 모든 역할 정의를 구성원으로 포함하는 프로젝트입니다.브라우저의 URL 표시줄을 보고 asp.net dev 서버에서 실행 중인지 쉽게 알 수 있습니다. 포트 81 대신 임의의 포트 번호를 사용할 수 있기 때문입니다.
당신은 dev fabric 또는 Azure fabric에서 실행 중인지 확인해야 합니다.RoleEnvironment.IsAvailable그렇다면 역할 환경에서 아무 것이나 호출해도 무방합니다.잘못된 경우에는 패브릭 내에서 실행되지 않습니다.
제거하기<Sites>에 태그를 달다.ServiceDefinition.csdef파일은 당사와 마찬가지로 사용자에게 해결 방법이 될 수 있지만 사이트가 클라우드의 전체 IIS에 배포되지는 않습니다.우리는 SDK 1.7을 사용하고 있습니다.
그래서 요약하자면:RoleEnvironment.IsAvailable = False이을포함여에 .ServiceDefinition.csdef추가할 수 있는 인스턴스 수는 1입니다.
<Sites>
<Site name="Blah">
<Bindings>
<Binding name="Endpoint1" endpointName="Http" />
<Binding name="Endpoint1" endpointName="Https" />
</Bindings>
</Site>
</Sites>
를 합니다.<Sites>node 및 배포)를과 같은 결과를 볼 수 .RoleEnvironment.IsAvailable = True.
실제로 발생한 일에 대한 로그는 거의 없습니다. 웹 사이트는 정상적으로 실행되고 있으며, 일반적으로 배포하지 않는 인스턴스가 1개뿐이고 사이트가 정상적으로 실행되고 있는 경우를 제외하고는 경고가 없습니다.
이것은 최근의 문제이고 저는 그 msshrtmi.dll에 약간의 변경이 있을 것이라고 생각합니다.만약 그것이 실제로 문제가 될 수 있는 것에 대해 조금 더 기록할 수 있습니다.RoleEnvironment사용할 수 없습니다.
이에 대한 후속 조치로, 누군가가 다시 같은 문제에 부딪힐 경우를 대비하여 어떤 이유로든 배포 중 하나가 컴퓨팅 에뮬레이터에 갇혔을 수도 있습니다.
제게 일어난 일은 여러 웹사이트를 포함하는 웹 역할이 있었고 각각 다른 호스트 이름에 바인딩되어 있었습니다.예: localhost 및 test.localhost.및 test.localhost:81localhost:81에 .하지만 어떤 이상한 이유로 인해 한 배포가 컴퓨팅 에뮬레이터에 나열되고 Visual Studio 디버깅이 없으면 "역할 인스턴스가 파괴됨" 또는 그와 같은 방식으로 표시되는 이상한 상태가 되었습니다.이 배포에는 여전히 IIS에 웹 사이트가 배포되어 있습니다.그런 다음 이 버그 배포에 대해 알지 못한 채 이전 배포 파일을 로드하는 기본 URL(test.localhost:81)에 액세스했습니다.가 (으) ▁that▁(▁the▁used▁page▁the▁worked다▁actually▁until)를 실제로 사용하는 페이지를 열기 전까지 작동했습니다.RoleEnvironment.GetConfigurationSettingValue방법, 그리고 그때서야 저는 그 예외를 얻었습니다.이 가짜 배포 문제는 중단점이나 예외 사항을 위반하지 않았기 때문에 정말 좌절스러웠지만, 제가 작업한 사이트와 정확히 일치했습니다.
이것을 깨달았을 때, 저는 새 포트 아래에서 호스트 이름을 열었고 거기서 페이지가 예상대로 작동했습니다.컴퓨터 에뮬레이터에서 이 버그 배포를 제거하자 IIS 웹 사이트도 삭제되었으며 다행히도 포트는 이제 예상대로 사용할 수 있습니다.
dev 패브릭을 실행하고 있는지 확인한 후 동일한 오류가 발생하면 인스턴스 수를 1개로 줄이십시오.그것이 저를 위해 고쳐주었습니다.
그래도 2개의 인스턴스로 디버그를 할 수 없는 것이 이상합니다.
asp.net 개발 서버 대신 dev/Azure 패브릭으로 실행해야 한다는 지적이 많지만, 롤 환경을 사용하려면 애플리케이션을 Azure에 게시할 때 올바른 실행 모델을 선택해야 한다는 점을 언급할 필요가 있다고 생각합니다.
현재 3가지 모델이 있습니다.
- VM
- 웹 사이트
- 클라우드 서비스
자세한 내용은 http://azure.microsoft.com/en-us/documentation/articles/fundamentals-application-models 을 참조하십시오.
그리고 특히 다음 단락:
Azure에서 제공하는 초기 실행 모델인 클라우드 서비스는 명시적으로 PaaS 접근 방식입니다.PaaS와 웹 호스팅 간의 경계는 모호하지만 클라우드 서비스는 다음과 같은 몇 가지 중요한 측면에서 웹 사이트와 다릅니다.
- 웹 사이트와 달리 클라우드 서비스는 애플리케이션의 VM에 대한 관리 액세스를 제공합니다.이렇게 하면 웹 사이트에서는 가능하지 않은 응용 프로그램에 필요한 임의 소프트웨어를 설치할 수 있습니다.
- 클라우드 서비스는 웹 역할과 작업자 역할을 모두 제공하기 때문에 비즈니스 로직을 위해 별도의 VM이 필요한 다중 계층 애플리케이션에는 웹 사이트보다 더 나은 선택입니다.
- 클라우드 서비스는 별도의 스테이징 및 프로덕션 환경을 제공하여 웹 사이트보다 애플리케이션 업데이트를 다소 원활하게 수행합니다.
- 웹 사이트와 달리 Azure Virtual Network 및 Azure Connect와 같은 네트워킹 기술을 사용하여 사내 컴퓨터를 클라우드 서비스 애플리케이션에 연결할 수 있습니다.
- 클라우드 서비스를 사용하면 원격 데스크톱을 사용하여 애플리케이션의 VM에 직접 연결할 수 있습니다. 이는 웹 사이트에서는 불가능한 일입니다.
다음을 확인할 수 있습니다.RoleEnvironment.IsAvailable 런타임으로 , 는 "Azure"라는 입니다.RoleEnvironment해당되지 않습니다.
언급URL : https://stackoverflow.com/questions/2957938/why-am-i-getting-sehexception-when-calling-roleenvironment-getconfigurationsetti
'programing' 카테고리의 다른 글
| PL/SQL 코드 검색 (0) | 2023.07.16 |
|---|---|
| C에서 문자열로 변환 (0) | 2023.07.16 |
| SQL에서 ON 절과 using 절의 차이 (0) | 2023.07.16 |
| mysql은 오라클의 "분석 기능"과 동등합니까? (0) | 2023.07.16 |
| 임시 테이블에서 필드 이름을 검색하는 방법(SQL Server 2008) (0) | 2023.07.16 |