2013-02-02 2 views
1

Asp.net에서 Windows Azure Cloud로 마이그레이션되는 웹 프로젝트를 실행하는 중 예외가 발생합니다. ASP.net 응용 프로그램을 실행하려고하면 Windows Azure Cloud로 마이그레이션 한 후 다음 예외가 발생합니다. 나, someon 할 주시기 바랍니다 필요한 해결책을 찾기위한 단서는 당신이 Application_Start 방법에 BLOB에 액세스 할 같은 푸른 물건을 수행하려고 할 경우 발생이 컨텍스트에서는 응답을 사용할 수 없습니다.

**Exception:** 
Server.GetLastError().GetBaseException() 
{"Response is not available in this context."} 
    [System.Web.HttpException]: {"Response is not available in this context."} 
    Data: {System.Collections.ListDictionaryInternal} 
    HelpLink: null 
    InnerException: null 
    Message: "Response is not available in this context." 
    Source: "System.Web" 

    StackTrace: " at System.Web.UI.Page.get_Response()\r\n at Writehome_aspxToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract)\r\n at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle objectTypeHandle, Type objectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declare 
dType)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)\r\n at WritePlaceHolderToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract)\r\n at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.S 
erializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle objectTypeHandle, Type objectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)\r\n at WriteArrayOfControlToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , Collection 
DataContract)\r\n at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle objectTypeHandle, Type objectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDec 
laredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)\r\n at WriteArrayOfanyTypeToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract)\r\n at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)\r\n a 
t System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)\r\n at WriteSerializableSessionStateStoreDataToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract)\r\n at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)\r\n at System.Runtime.Serialization.NetDataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContract contract, Hashtable surrogateDataContracts)\r\n at System.Runtime.Serialization.NetDataContractSerializer.InternalWr 
iteObject(XmlWriterDelegator writer, Object graph)\r\n at System.Runtime.Serialization.XmlObjectSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)\r\n at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)\r\n at System.Runtime.Serialization.XmlObjectSerializer.WriteObject(XmlDictionaryWriter writer, Object graph)\r\n at Microsoft.ApplicationServer.Caching.NetDataContractCacheObjectSerializer.Serialize(Stream stream, Object value)\r\n at Microsoft.ApplicationServer.Caching.DataCacheObjectSerializationProvider.SerializeUserObject(Object userObject, Boolean isCompressionEnabled, ValueFlagsVersion flagsType)\r\n at Microsoft.ApplicationServer.Caching.SocketClientProtocol.SerializeValue(Object obj)\r\n at Microsoft.ApplicationServer.Caching.SocketClientProtocol.PutAndUnlock(String key, Object value, DataCacheLockHandle lockHandle, 
TimeSpan timeout, DataCacheTag[] tags, String region, IMonitoringListener listener)\r\n at Microsoft.ApplicationServer.Caching.DataCache.InternalPutAndUnlock(String key, Object value, DataCacheLockHandle lockHandle, TimeSpan timeout, DataCacheTag[] tags, String region, IMonitoringListener listener)\r\n at Microsoft.ApplicationServer.Caching.DataCache.<>c__DisplayClass9c.<PutAndUnlock>b__9b()\r\n at Microsoft.ApplicationServer.Caching.MonitoringListenerFactory.EmptyListener.Microsoft.ApplicationServer.Caching.IMonitoringListener.Listen[TResult](Func`1 innerDelegate)\r\n at Microsoft.ApplicationServer.Caching.DataCache.PutAndUnlock(String key, Object value, DataCacheLockHandle lockHandle, TimeSpan timeout)\r\n at Microsoft.Web.DistributedCache.DataCacheWrapper.PutAndUnlock(String key, Object value, DataCacheLockHandle lockHandle, TimeSpan timeout)\r\n at Microsoft.Web.DistributedCache.DataCacheForwarderBase.<>c__DisplayClass1c.<PutAndUnlock>b__1b()\r\n at Microsoft.Web.DistributedCache.DataCacheFo 
rwarderBase.<>c__DisplayClass31`1.<PerformCacheOperation>b__30()\r\n at Microsoft.Web.DistributedCache.DataCacheRetryWrapper.PerformCacheOperation(Action action)\r\n at Microsoft.Web.DistributedCache.DataCacheForwarderBase.PerformCacheOperation[TResult](Func`1 func)\r\n at Microsoft.Web.DistributedCache.DataCacheForwarderBase.PutAndUnlock(String key, Object value, DataCacheLockHandle lockHandle, TimeSpan timeout)\r\n at Microsoft.Web.DistributedCache.BlobBasedSessionStoreProvider.SetAndReleaseItemExclusive(HttpContextBase context, String id, SessionStateStoreData item, Object lockId, Boolean newItem)\r\n at Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem)\r\n at System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs)\r\n at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Exec 
ute()\r\n at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)" 
    TargetSite: {System.Web.HttpResponse get_Response()} 

답변

0

..이 없습니다.

HttpContext.Current.Response이 액세스 가능했기 때문입니다 .Azure는 로깅을 위해 Response 개체를 사용합니다. 어쨌든, 웹 응용 프로그램의 blob에 액세스해야하거나 다른 Azure 작업을 수행해야하는 경우 Application_Start 메서드와 같이 Response 객체가 없더라도이 작업을 수행해야합니다. HttpContext.Current to null으로 설정하는 것이 현명한 방법입니다.

위해 Application_Start는

protected void Application_Start(object sender, EventArgs e) { CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) => { configSetter(RoleEnvironment.GetConfigurationSettingValue(configName)); }); using (new AzureContext()) { CloudStorageAccount storageAccount = CloudStorageAccount.FromConfigurationSetting("BlobConnectionString"); CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference("mycontainer"); container.CreateIfNotExist(); container.FetchAttributes(); } } 

아래 AzureContext은 다음과 같습니다과 같습니다 자세한 내용은

public class AzureContext : IDisposable 
{ 
    HttpContext _oldHttpContext; 
    bool _restoreOldHttpContext = false; 


    public AzureContext(bool forceSettingContextToNull = false) 
    { 
     if (forceSettingContextToNull) 
     { 
      _oldHttpContext = HttpContext.Current; 
      HttpContext.Current = null; 
      _restoreOldHttpContext = true; 
     } 
     else 
     { 
      try 
      { 
       HttpResponse response = HttpContext.Current.Response; 
      } 
      catch (HttpException) 
      { 
       _oldHttpContext = HttpContext.Current; 
       HttpContext.Current = null; 
       _restoreOldHttpContext = true; 
      } 
     } 
    } 


    public void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      if (_restoreOldHttpContext) 
      { 
       HttpContext.Current = _oldHttpContext; 
      } 
     } 
    } 


    public void Dispose() 
    { 
     Dispose(true); 
    } 


    ~AzureContext() 
    { 
     Dispose(false); 
    } 
} 

내가이 당신에게 도움이되기를 바랍니다 Azure and Response is not available in this context

을 이것 좀 봐. 이 문제의 ... 당신은이 패치를 적용하여이 문제를 해결할 수 있기 때문에

0

나는

http://support.microsoft.com/kb/2468871

내가 클라우드뿐만 아니라 내 로컬 환경에서이 패치를 적용했다 ... 고통 환경 (시작 역할 사용). 그러나 업데이트 할 수 있으므로 지금은 클라우드 환경에 패치를 적용 할 필요가 없습니다. 클라우드에 문제가 여전히 존재하는 경우이 문제와 관련하여 Azure 지원 팀 (인도 : 1- (866) 676-6546)에 연락하면 패치 적용에 도움이됩니다.

+0

답장을 보내 주셔서 감사합니다. 그러나이 업데이트 후에도 동일한 오류가 발생합니다. – Ilayapsv

+0

@Ilayapsv를 다시 시작하고 확인할 수 있습니까? – NavaRajan

+0

예 PC 자체를 다시 시작하려고했지만 동일한 오류가 남아 있습니다. 세션 포인트 모드 = "사용자 정의"가 web.config에 설정되면 오류가 발생하는 또 다른 지점을 발견했습니다. 하지만 모드 = "InProc"에서는 잘 작동합니다. – Ilayapsv

0

모든 도움을 주셔서 감사합니다. finnally 문제의 원인을 발견했습니다. System.Web.UI.WebControls를 세션에 저장하려고했기 때문에 문제가 발생했습니다.

모든 System.Web.UI.WebControls가 serilizable이 아니므로 세션에 대한 WebControls의 저장을 피하십시오.

해피 코딩 ..

관련 문제