Diferencias en System.Net.Sockets entre Windows XP y Windows Vista
-
miércoles, 08 de abril de 2009 13:24
Hola,
Tenemos una aplicación que emplea Windows sockets, escrita en C#, que se está comportando de manera diferente (incorrectamente) en Windows Vista a como lo hacía en Windows Xp.
La diferencia encontrada está en que la aplicacion deja de recibir datos enviados (a pesar de que se han enviado) hasta que se produce un timeout de recepción. La versión de .NET Framework empleada es la 2.0. Adjunto unas trazas de la misma aplicación en XP y Vista por si alguien puede ayudar.
System.Net.Sockets different behaviour between XP and Vista*************** Windows XP***************************
System.Net.Sockets Verbose: 0 : [0880] TcpListener#48780169::AcceptSocket()
System.Net.Sockets Verbose: 0 : [0880] Socket#47623971::Accept()
System.Net.Sockets Verbose: 0 : [3932] Socket#1997173::BeginReceive()
System.Net.Sockets Verbose: 0 : [3088] Data from Socket#1997173::PostCompletion
System.Net.Sockets Verbose: 0 : [3088] 00000000 : 3D 50 56 4D 20 30 32 39-38 0A 3C 3F 78 6D 6C 20 : 0298.<?xml
====== more data dump
System.Net.Sockets Verbose: 0 : [3088] 000000A0 : 61 72 65 22 20 70 72 6F-76 69 64 65 72 54 79 70 : are" providerTyp
System.Net.Sockets Verbose: 0 : [3932] Exiting Socket#1997173::BeginReceive() -> OverlappedAsyncResult#6451435
System.Net.Sockets Verbose: 0 : [3088] 000000B0 : 65 3D 22 56 65 6E 64 69-6E 67 4D 61 63 68 69 6E : e="VendingMachin
====== more data dump
System.Net.Sockets Verbose: 0 : [3088] 00000130 : 72 56 4D 3E : rVM>
System.Net.Sockets Verbose: 0 : [3088] Socket#1997173::EndReceive(OverlappedAsyncResult#6451435)
System.Net.Sockets Verbose: 0 : [3088] Exiting Socket#1997173::EndReceive() -> 308#308
System.Net.Sockets Verbose: 0 : [3932] Socket#1997173::BeginReceive()
System.Net.Sockets Verbose: 0 : [3932] Exiting Socket#1997173::BeginReceive() -> OverlappedAsyncResult#26998456
System.Net.Sockets Verbose: 0 : [3156] Socket#1997173::Send()
System.Net.Sockets Verbose: 0 : [3156] Data from Socket#1997173::Send
System.Net.Sockets Verbose: 0 : [3156] 00000000 : 3D 50 56 4D 20 30 31 34-32 0A 3C 3F 78 6D 6C 20 : 0142.<?xml
====== more data dump
System.Net.Sockets Verbose: 0 : [3156] 00000090 : 2F 31 2E 30 22 20 2F 3E- : /1.0" />
System.Net.Sockets Verbose: 0 : [3156] Exiting Socket#1997173::Send() -> 152#152
System.Net.Sockets Verbose: 0 : [3156] Socket#1997173::Send()
System.Net.Sockets Verbose: 0 : [3156] Data from Socket#1997173::Send
System.Net.Sockets Verbose: 0 : [3156] 00000000 : 3D 50 56 4D 20 30 31 33-31 0A 3C 3F 78 6D 6C 20 : 0131.<?xml
====== more data dump
System.Net.Sockets Verbose: 0 : [3156] 00000080 : 6D 2F 54 49 43 2F 31 2E-30 22 20 2F 3E : m/TIC/1.0" />
System.Net.Sockets Verbose: 0 : [3156] Exiting Socket#1997173::Send() -> 141#141
System.Net.Sockets Verbose: 0 : [3156] Socket#1997173::Receive()
System.Net.Sockets Verbose: 0 : [3156] Data from Socket#1997173::Receive
System.Net.Sockets Verbose: 0 : [3156] 00000000 : 3D 50 56 4D 20 30 31 34-32 0A 3C 3F 78 6D 6C 20 : 0142.<?xml
====== more data dump
System.Net.Sockets Verbose: 0 : [3156] 00000090 : 2F 31 2E 30 22 20 2F 3E- : /1.0" />
System.Net.Sockets Verbose: 0 : [3156] Exiting Socket#1997173::Receive() -> 152#152
(dialog continues normally - data received, more data sent)
System.Net.Sockets Verbose: 0 : [3156] Socket#1997173::Send()
System.Net.Sockets Verbose: 0 : [3156] Data from Socket#1997173::Send
System.Net.Sockets Verbose: 0 : [3156] 00000000 : 3D 50 56 4D 20 30 31 31-39 0A 3C 3F 78 6D 6C 20 : 0119.<?xml
====== more data dump
System.Net.Sockets Verbose: 0 : [3156] 00000070 : 65 2E 63 6F 6D 2F 54 49-43 2F 31 2E 30 22 20 2F : e.com/TIC/1.0" /
System.Net.Sockets Verbose: 0 : [3156] 00000080 : 3E : >
System.Net.Sockets Verbose: 0 : [3156] Exiting Socket#1997173::Send() -> 129#129
System.Net.Sockets Verbose: 0 : [3156] Socket#1997173::Receive()
*************** Windows Vista ***************************System.Net.Sockets Verbose: 0 : [6132] TcpListener#52766124::AcceptSocket()
System.Net.Sockets Verbose: 0 : [6132] Socket#15927457::Accept()
System.Net.Sockets Verbose: 0 : [5452] Socket#59321765::BeginReceive()
System.Net.Sockets Verbose: 0 : [2736] Data from Socket#59321765::PostCompletion
System.Net.Sockets Verbose: 0 : [2736] 00000000 : 3D 50 56 4D 20 30 32 39-38 0A 3C 3F 78 6D 6C 20 : 0298.<?xml
System.Net.Sockets Verbose: 0 : [2736] 00000010 : 76 65 72 73 69 6F 6E 3D-22 31 2E 30 22 20 65 6E : version="1.0" en
System.Net.Sockets Verbose: 0 : [5452] Exiting Socket#59321765::BeginReceive() -> OverlappedAsyncResult#37088038
System.Net.Sockets Verbose: 0 : [2736] 00000020 : 63 6F 64 69 6E 67 3D 22-57 69 6E 64 6F 77 73 2D : coding="Windows-
====== more data
System.Net.Sockets Verbose: 0 : [2736] 00000130 : 72 56 4D 3E : rVM>
System.Net.Sockets Verbose: 0 : [2736] Socket#59321765::EndReceive(OverlappedAsyncResult#37088038)
System.Net.Sockets Verbose: 0 : [2736] Exiting Socket#59321765::EndReceive() -> 308#308
System.Net.Sockets Verbose: 0 : [5452] Socket#59321765::BeginReceive()
System.Net.Sockets Verbose: 0 : [5452] Exiting Socket#59321765::BeginReceive() -> OverlappedAsyncResult#23072233
System.Net.Sockets Verbose: 0 : [4804] Socket#59321765::Send()
System.Net.Sockets Verbose: 0 : [4804] Data from Socket#59321765::Send
System.Net.Sockets Verbose: 0 : [4804] 00000000 : 3D 50 56 4D 20 30 31 34-32 0A 3C 3F 78 6D 6C 20 : 0142.<?xml
====== more data
System.Net.Sockets Verbose: 0 : [4804] 00000090 : 2F 31 2E 30 22 20 2F 3E- : /1.0" />
System.Net.Sockets Verbose: 0 : [4804] Exiting Socket#59321765::Send() -> 152#152
System.Net.Sockets Verbose: 0 : [4804] Socket#59321765::Send()
System.Net.Sockets Verbose: 0 : [4804] Data from Socket#59321765::Send
System.Net.Sockets Verbose: 0 : [4804] 00000000 : 3D 50 56 4D 20 30 31 33-31 0A 3C 3F 78 6D 6C 20 : 0131.<?xml
====== more data
System.Net.Sockets Verbose: 0 : [4804] 00000080 : 6D 2F 54 49 43 2F 31 2E-30 22 20 2F 3E : m/TIC/1.0" />
System.Net.Sockets Verbose: 0 : [4804] Exiting Socket#59321765::Send() -> 141#141
System.Net.Sockets Verbose: 0 : [4804] Socket#59321765::Receive()
System.Net.Sockets Verbose: 0 : [2736] Data from Socket#59321765::PostCompletion
System.Net.Sockets Verbose: 0 : [2736] 00000000 : 3D 50 56 4D 20 30 31 34-32 0A 3C 3F 78 6D 6C 20 : 0142.<?xml
====== more data
System.Net.Sockets Verbose: 0 : [2736] 00000090 : 2F 31 2E 30 22 20 2F 3E- : /1.0" />(dialog is stopped - receive timeout!)
------------------
En el primer caso, la aplicación que está a la espera de otra aplicación que inicie diálogo, recibe una serie de mensajes y puede contestar a todos ellos sin problemas.
En el segundo caso (Windows Vista) llega un momento en que la aplicación deja de recibir datos, a pesar de que el otro extremo ha enviado información, y al de un tiempo se produce un timeout que hace que la aplicación se pare.
En ambos casos (es la misma aplicación) se pasa de un uso asíncrono del socket de envio/recepciòn a un uso síncrono.
Muchas gracias,
Todas las respuestas
-
miércoles, 08 de abril de 2009 15:09preguntas al respecto
1- ese windows vista esta 100% actualizado?
2- tienes UAC activado en Windows Vista?
3- ya verificaste que el problema no sea físico?
Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.Juan Carlos Ruiz Pacheco
Ingeniero de Sistemas
Microsoft MVP C#
MCP,MCTS,DCE+Platino,OCA,OCP
Blog Técnico


