Servicio Windows

08/07/2009 - 23:24 por Pintamono | Informe spam
Que tal,

Estoy haciendo un servicio que se encarga de conectarse a otro
servicio via socket, para ello estoy usando el codigo de la pagina de
ejemplo de microsoft, pero tengo un pequeño problema...

este es el codigo

try
{
// Establish the remote endpoint for the socket.
// The name of the
// remote device is "host.contoso.com".
//IPHostEntry ipHostInfo = Dns.GetHostByName
("localhost");
IPAddress ipAddress Dns.GetHostEntry("[IP_DEL_SERVER]").AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

// Create a TCP/IP socket.
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);

// Connect to the remote endpoint.
client.BeginConnect(remoteEP,
new AsyncCallback(ConnectCallback), client);
connectDone.WaitOne();

// Send test data to the remote device.
Send(client, psMensaje);
sendDone.WaitOne();

// Receive the response from the remote device.
Receive(client);
receiveDone.WaitOne();

// Release the socket.
client.Shutdown(SocketShutdown.Both);
client.Close();

}

se me queda pegado en el "sendDone.WaitOne()", ahi se queda por un
rato (bastante), creo que es problema de respuesta del server

estoy en lo correcto?

Este es mi primer paso en lo que es socket y por eso estoy usando el
ejemplo de microsoft, agradeceria orientacion al respecto, tengo que
hacer un servicio que reciba datos de una aplicacion y los envie a
otro servidor y espere la respuesta, luego responder a quien me envia
los datos...

segun lo anterior, necesito un servidor de socket sincronico en ambos
casos correcto?

Preguntas similare

Leer las respuestas

#1 Angel J. Hernández M.
11/07/2009 - 10:51 | Informe spam
WaitOne sólo bloquea el hilo actual hasta WaitHandle recibe una señal,
pregunto... Para que quieres un servidor sincrónico de sockets?

Saludos,

Angel



Angel J. Hernández M
MCP,MCAD,MCSD,MCDBA
Microsoft MVP
http://msmvps.com/blogs/angelhernandez
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
http://www.customware.net
Technical Solutions Architect



"Pintamono" wrote in message
news:
Que tal,

Estoy haciendo un servicio que se encarga de conectarse a otro
servicio via socket, para ello estoy usando el codigo de la pagina de
ejemplo de microsoft, pero tengo un pequeño problema...

este es el codigo

try
{
// Establish the remote endpoint for the socket.
// The name of the
// remote device is "host.contoso.com".
//IPHostEntry ipHostInfo = Dns.GetHostByName
("localhost");
IPAddress ipAddress > Dns.GetHostEntry("[IP_DEL_SERVER]").AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

// Create a TCP/IP socket.
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);

// Connect to the remote endpoint.
client.BeginConnect(remoteEP,
new AsyncCallback(ConnectCallback), client);
connectDone.WaitOne();

// Send test data to the remote device.
Send(client, psMensaje);
sendDone.WaitOne();

// Receive the response from the remote device.
Receive(client);
receiveDone.WaitOne();

// Release the socket.
client.Shutdown(SocketShutdown.Both);
client.Close();

}

se me queda pegado en el "sendDone.WaitOne()", ahi se queda por un
rato (bastante), creo que es problema de respuesta del server

estoy en lo correcto?

Este es mi primer paso en lo que es socket y por eso estoy usando el
ejemplo de microsoft, agradeceria orientacion al respecto, tengo que
hacer un servicio que reciba datos de una aplicacion y los envie a
otro servidor y espere la respuesta, luego responder a quien me envia
los datos...

segun lo anterior, necesito un servidor de socket sincronico en ambos
casos correcto?
Respuesta Responder a este mensaje
#2 Pintamono
13/07/2009 - 15:15 | Informe spam
Muchas gracias por contestar, me di cuenta que el método que estaba
usando (bajado de MS) es asincronico asi que utilice el sincronico,
entonces el codigo cambio a

public void StartListening()
{
// Data buffer for incoming data.
byte[] bytes = new Byte[1024];
// The port number for the remote device.
int port = SincroFidelityServ.Port;

// Establish the local endpoint for the socket.
// The DNS name of the computer
IPAddress ipAddress = Dns.GetHostEntry
(Environment.MachineName).AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress,
port);
// Create a TCP/IP socket.
Socket listener = new Socket
(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
// Bind the socket to the local endpoint and listen for
incoming connections.
try
{
listener.Bind(localEndPoint);
listener.Listen(150);
string data = string.Empty;
while (true)
{
//Socket de escucha
Socket handler = listener.Accept();
try
{
while (true)
{
bytes = new byte[1024];
int bytesRec = handler.Receive(bytes);
data += Encoding.ASCII.GetString(bytes, 0,
bytesRec);
if (data.IndexOf("<EOF>") > -1) break;
}
Mensaje.Procesar(data);
handler.Send(Mensaje.Respuesta());
}
catch (Exception e)
{
SincroFidelity.SincroFidelityServ.ErrorGeneral
(e.Message);
}
finally
{
handler.Shutdown(SocketShutdown.Both);
handler.Close();
mMensaje = null;
}
}
}
catch (SocketException e)
{
SincroFidelity.SincroFidelityServ.ErrorGeneral
(e.Message);
}
catch (ObjectDisposedException e)
{
SincroFidelity.SincroFidelityServ.ErrorGeneral
(e.Message);
}
catch (ArgumentException e)
{
SincroFidelity.SincroFidelityServ.ErrorGeneral
(e.Message);
}
catch (InvalidOperationException e)
{
SincroFidelity.SincroFidelityServ.ErrorGeneral
(e.Message);
}
catch (System.Security.SecurityException e)
{
SincroFidelity.SincroFidelityServ.ErrorGeneral
(e.Message);
}
catch (Exception e)
{
SincroFidelity.SincroFidelityServ.ErrorGeneral
(e.Message);
}
}

Lo que tengo que hacer es recibir un mensaje desde A, procesarlo,
enviarlo a B, esperar respuesta, procesarla y finalmente responder a
A.


"Mensaje" es la clase encargada de consultar al otro servicio...

Se supone que mi servicio tiene que aceptar varias peticiones a la
vez, eso como se haría? habría que colocar "Socket handler listener.Accept();" dentro de un hilo? o no?

Gracias.

On 11 jul, 04:51, Angel J. Hernández M.
wrote:
WaitOne sólo bloquea el hilo actual hasta  WaitHandle recibe una señal,
pregunto... Para que quieres un servidor sincrónico de sockets?

Saludos,

Angel

Angel J. Hernández M
MCP,MCAD,MCSD,MCDBA
Microsoft MVPhttp://msmvps.com/blogs/angelhernandez
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*http://www.customware.net
Technical Solutions Architect

"Pintamono" wrote in message

news:

> Que tal,

> Estoy haciendo un servicio que se encarga de conectarse a otro
> servicio via socket, para ello estoy usando el codigo de la pagina de
> ejemplo de microsoft, pero tengo un pequeño problema...

> este es el codigo

> try
>            {
>                // Establish the remote endpoint for the socket.
>                // The name of the
>                // remote device is "host.contoso.com".
>                //IPHostEntry ipHostInfo = Dns.GetHostByName
> ("localhost");
>                IPAddress ipAddress > > Dns.GetHostEntry("[IP_DEL_SERVER]").AddressList[0];
>                IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

>                // Create a TCP/IP socket.
>                Socket client = new Socket(AddressFamily.InterNetwork,
>                    SocketType.Stream, ProtocolType.Tcp);

>                // Connect to the remote endpoint.
>                client.BeginConnect(remoteEP,
>                    new AsyncCallback(ConnectCallback), client);
>                connectDone.WaitOne();

>                // Send test data to the remote device.
>                Send(client, psMensaje);
>                sendDone.WaitOne();

>                // Receive the response from the remote device.
>                Receive(client);
>                receiveDone.WaitOne();

>                // Release the socket.
>                client.Shutdown(SocketShutdown.Both);
>                client.Close();

>            }

> se me queda pegado en el "sendDone.WaitOne()", ahi se queda por un
> rato (bastante), creo que es problema de respuesta del server

> estoy en lo correcto?

> Este es mi primer paso en lo que es socket y por eso estoy usando el
> ejemplo de microsoft, agradeceria orientacion al respecto, tengo que
> hacer un servicio que reciba datos de una aplicacion y los envie a
> otro servidor y espere la respuesta, luego responder a quien me envia
> los datos...

> segun lo anterior, necesito un servidor de socket sincronico en ambos
> casos correcto?
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida