2011-11-28 9 views
8

L'applicazione è scritta in ASP .NET 4.0 ospitato in IIS 7.5 sulla macchina che esegue Windows Server 2008 R2. Il pool di applicazioni utilizza la modalità Pipeline gestito integrato.Applicazione Web ASP.NET 4.0 che lancia "Funzione errata. (Eccezione da HRESULT: 0x80070001)"

L'eccezione riportata di seguito viene generata su diverse pagine che non hanno nulla in comune. Non riesco a riprodurre l'eccezione da solo, ma è successo 10 volte la settimana scorsa nell'ambiente di produzione.

dalla pila Trace vedo che l'eccezione generata dal metodo "HttpRequest.GetEntireRawContent", così mi chiedevo se c'è qualcosa di sbagliato con la richiesta, come ad esempio che sia troppo lungo o che contiene un carattere non valido.

Giusto per essere chiari, questa eccezione è non generata dal codice che ho scritto, proviene dallo spazio dei nomi System.Web. Quindi non posso aggiungere una prova ... prendila intorno.

Sarebbe utile per qualsiasi idea sulla causa dell'eccezione o sulla risoluzione dei problemi per trovare ulteriori informazioni.

Exception: System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.Web.HttpException (0x80004005): An error occurred while communicating with the remote host. The error code is 0x80070001. ---> System.Runtime.InteropServices.COMException (0x80070001): Incorrect function. (Exception from HRESULT: 0x80070001) 
    at System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError(Int32 result, Boolean throwOnDisconnect) 
    at System.Web.Hosting.IIS7WorkerRequest.ReadEntityCoreSync(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Web.HttpRequest.GetEntireRawContent() 
    at System.Web.HttpRequest.FillInFormCollection() 
    at System.Web.HttpRequest.get_Form() 
    at System.Web.HttpRequest.get_HasForm() 
    at System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull) 
    at System.Web.UI.Page.DeterminePostBackMode() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.HandleError(Exception e) 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest() 
    at System.Web.UI.Page.ProcessRequest(HttpContext context) 
    at ASP.report_openinghours_aspx.ProcessRequest(HttpContext context) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

EDIT:

Come sottolineato da lukiffer c'è una domanda simile qui: stackoverflow.com/questions/7825127/ La correzione suggerita è di spegnere TCP offload, il modo in cui ho capito è che offload TCP protegge il server web da molta della complessità del TCP. Pertanto, disattivarlo consumerebbe un sacco di cicli della CPU, quindi rallenterebbe i server web, il che ovviamente non è desiderabile.

Inoltre, non capisco perché lo scaricamento TCP possa causare un'eccezione a IIS.

+1

Vedere: http: // stackoverflow.it/questions/7825127/system-runtime-interopservices-comexception-incorrect-function-exception-from – lukiffer

+0

Puoi inserire il codice all'interno di 'report_openinghours.aspx.cs' che sta chiamando il servizio remoto/origine dati, comprese le chiamate COM e oggetti – Kane

+0

Il codice contenuto in "report_openinghours.aspx.cs" non chiama un servizio/origine dati remota, né alcuna chiamata o oggetto COM. Sembra che il codice che utilizza un oggetto COM si trovi nella classe IIS7WorkerRequest. – user1069816

risposta

0

Non si può ancora avere questo problema, ma se altri si imbattono in questo problema qui è un collegamento che potrebbe aiutare.

TechNet forum

opzioni TCP Task scarico del il driver NIC dovrebbero essere fissati a livello di NIC physicla (il NIC dell'host che la rete virtuale esterna sta usando). Assicurati di non disabilitare la canna fumaria e pensando di disabilitare la funzione Offloading. Nelle impostazioni di il driver sono opzioni con "offloading" nel nome: queste sono le opzioni da disattivare.

  • Disabilita managment Accendere il phsycial NIC (alcuni driver girano su questo).

  • Prova una scheda di rete fisica Intel (la meno problematica di tutti con Hyper-V)

  • Controllare che i circuiti integrati nella VM sono uguali per l'host.

  • Verificare la presenza di altri problemi con la VM, ad esempio l'aumento delle risorse con CPU o disco IO o qualsiasi altra cosa che potrebbe causare un blocco.

+0

Per favore dimmi perché ritieni che questa sia una soluzione al problema. –

+0

Non pretendo di essere un esperto solo un po 'di esperienza con VM e alcuni ambienti complessi. La mia migliore idea di ciò che sta accadendo è che la gestione dell'alimentazione per il driver hardware è in conflitto con servizi e processi che richiedono un accesso costante e immediato al driver. Mantenere il driver dal risparmio energetico non è pratico per l'ambiente server; vale a dire che non ho mai eseguito un COA su una scheda di rete, ma lo includo nei costi operativi e lo elimini come una variabile di potenziali problemi nel tuo ambiente. –