2009-10-22 19 views
12

Lo siento si esto es un poco largo pero creí que era mejor publicar más que menos.Una conexión establecida fue abortada por el software en su máquina host

Esta es también mi primera publicación aquí, así que, por favor, perdona.

He estado tratando de resolver esto por un tiempo. y fue en vano, con la esperanza de que haya un genio que haya encontrado esto antes.

Este es un problema intermitente y ha sido difícil de reproducir. El código que estoy corriendo simplemente llama a un servicio web la llamada de servicio Web está en un bucle (por lo que podríamos estar haciendo esto mucho, 1500 veces o más)

Este es el código que está causando el error:

HttpWebRequest groupRequest = null; 
WebResponse groupResponse = null;    
try 
{  
    XmlDocument doc = new XmlDocument(); 
    groupRequest = (HttpWebRequest)HttpWebRequest.Create(String.Format(Server.HtmlDecode(Util.GetConfigValue("ImpersonatedSearch.GroupLookupUrl")),userIntranetID)); 
    groupRequest.Proxy = null; 
    groupRequest.KeepAlive = false; 
    groupResponse = groupRequest.GetResponse(); 
    doc.Load(groupResponse.GetResponseStream()); 
    foreach (XmlElement nameElement in doc.GetElementsByTagName(XML_GROUP_NAME)) 
    { 
     foreach (string domain in _groupDomains) 
     { 
      try 
      { 
       string group = new System.Security.Principal.NTAccount(domain, nameElement.InnerText).Translate(typeof(System.Security.Principal.SecurityIdentifier)).Value; 
       impersonationChain.Append(";").Append(group);        
       break; 
      } 
      catch{}       
     } // loop through    
    } 
} 
catch (Exception groupLookupException) 
{ 
    throw new ApplicationException(String.Format(@"Impersonated Search ERROR: Could not find groups for user<{0}\{1}>", userNTDomain, userIntranetID), groupLookupException); 
} 
finally 
{ 
    if (groupResponse != null) 
    { 
     groupResponse.Close(); 
    } 
} 

Aquí está el error que ocurre a veces:

Could not find groups for user<DOMAIN\auser> ---> System.IO.IOException: Unable to read 
data from the transport connection: An established connection was aborted by the 
software in your host machine. ---> System.Net.Sockets.SocketException: An established 
connection was aborted by the software in your host machine at 
System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags 
socketFlags) at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 
size) --- End of inner exception stack trace --- at System.Net.ConnectStream.Read(Byte[] 
buffer, Int32 offset, Int32 size) at System.Xml.XmlTextReaderImpl.ReadData() at 
System.Xml.XmlTextReaderImpl.ParseDocumentContent() at 
System.Xml.XmlLoader.LoadDocSequence 
(XmlDocument parentDoc) at System.Xml.XmlDocument.Load(XmlReader reader) at 
System.Xml.XmlDocument.Load(Stream inStream) at 
MyWebServices.ImpersonatedSearch.PerformQuery(QueryParameters parameters, 
String userIntranetID, String userNTDomain)--- End of inner exception stack trace 
---at MyWebServices.ImpersonatedSearch.PerformQuery(QueryParameters parameters, String userIntranetID, String userNTDomain) 
--- End of inner exception stack trace --- 
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, 
WebResponse response, Stream responseStream, Boolean asyncCall) 
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, 
Object[] parameters) at MyProgram. MyWebServices.ImpersonatedSearch.PerformQuery 
(QueryParameters parameters, String userIntranetID, String userNTDomain) 
at MyProgram.MyMethod() 

sentimos que era un montón de código para leer.
Esto sucede alrededor de 30 veces alrededor de 1700

+0

Este error es del lado del cliente o del servidor? – Zote

+0

Lado del cliente, pero esto se emite desde el servicio web – TheCodeFool

Respuesta

8

Probablemente esté llegando al tiempo de espera. Antes que nada, vuelva a encender el keepalive. En segundo lugar, verifique las marcas de tiempo en la solicitud y responda. Si hay un firewall entre el emisor y el receptor, asegúrese de que no cierre la conexión debido al tiempo de espera inactivo. He tenido estos dos problemas en el pasado, aunque con programación de socket genérico, no con DB.

+0

Lo haré gracias por la entrada, hice que el mantener vivo establezca el valor predeterminado de verdadero, pero lea una publicación sobre desactivarlos, voy a tratar de ver el tiempo de espera de el firewall Gracias – TheCodeFool

Cuestiones relacionadas