none
Diferencias en System.Net.Sockets entre Windows XP y Windows Vista

    Pregunta

  • 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,

    miércoles, 08 de abril de 2009 13:24

Todas las respuestas

  • preguntas 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
    miércoles, 08 de abril de 2009 15:09