2010-08-03 13 views
5

Así que estoy trabajando en un proyecto para mi pasantía y me he topado con una pared de ladrillos. Desafortunadamente, las únicas personas que conozco que están calificadas para ayudarme en la oficina están de vacaciones en este momento, y desafortunadamente Google no ha sido útil (o mis habilidades de búsqueda son inadecuadas), así que pensé en preguntar aquí.Pregunta sobre C#, servidores, XML

El proyecto consiste básicamente en hacer que un servidor emule uno que la empresa (que fabrica aplicaciones para teléfonos) ya tiene. Lo que tengo que hacer es que una de sus aplicaciones envíe una solicitud a mi servidor (tendré que modificar la aplicación para hacer esto, pero no sé cómo), y mi servidor responderá con una respuesta XML que la aplicación ya sabe cómo procesar (El objetivo principal es que podamos ver cómo responde la aplicación cuando el servidor real le envía un error simulándolo en mi servidor.)

Ahora, ya tengo algunas solicitudes HTTP de muestra y sus respuestas XML asociadas a la mano , tomado de simulaciones con la aplicación y el servidor real. La aplicación está escrita en C# y actualmente envía solicitudes web HTTP a la ubicación en línea del servidor real, que responde a estas solicitudes web HTTP con XML. Mi servidor, sin embargo, no tendrá una ubicación en línea, por lo que la aplicación deberá modificarse para que funcione con sockets en un host local.

Mis preguntas:

1) Mi jefe dice que crear un archivo XML para asociar ciertas peticiones con ciertas respuestas XML, pero no tengo ni idea de lo que significa o cómo hacer esto. (Dijo que también se podía hacer con un archivo .ini). ¿Alguien sabe?

2) Una vez que tengo este archivo XML que puede hacer estas asociaciones, ¿cómo puedo incorporarlo a mi servidor para que mi servidor pueda verificar la solicitud recibida contra su tabla de solicitudes válidas y averiguar qué respuesta enviar? ?

3) ¿Cómo se puede modificar la aplicación al usar las solicitudes web HTTP y las respuestas al uso de sockets?

Si tiene alguna pregunta o aclaración que necesita para responder mejor esto, no dude en consultarme.

Gracias!

+2

¿Ha considerado simplemente pedirle una aclaración? # 1 podría significar muchas cosas. –

+3

Tómese esto en serio cuando comience su viaje hacia el software, no * vaya contra corriente siempre que sea posible, perderá tiempo y quemará plazos. Tomar un cliente HTTP y convertirlo para usar sockets para que pueda usar un servidor de sockets es contraproducente, el método natural aquí es implementar su servidor en un contexto http. Use IIS para esto y un servicio ASMX lo más probable. Aún más fácil, tome una copia del servidor actual que ejecuta y simplemente modifíquelo para que todas las solicitudes sean respondidas con sus mensajes. –

+0

Pregúntele a su jefe si el servidor es un servicio web de WCF, o un servicio web de ASMX, u otra cosa. Si se trata de un servicio web de WCF, la implementación es mucho más sencilla, pregúntele dónde obtener los contratos y comience a leer tutoriales. –

Respuesta

1

Lo que está describiendo es un servicio web. Desafortunadamente, sus consejos para cambiar una configuración en un archivo .ini hacen que suene como si tuvieran un sistema propietario para hacer esto, en lugar de usar un ASMX estándar (que requiere IIS) o WCF (que puede ejecutarse en IIS o como un programa independiente servicio, que suena como lo que querría) servicio.

Sin más información sobre lo que están utilizando, no sé si podrán obtener mucha ayuda aquí.

0

Pregúntale a tu jefe si este cliente se comunica con soap, si es así, solo ve a MSDN y encuentra tutoriales sobre la implementación de un servicio web ASMX, sigue el tutorial y tendrás un shell para empezar.

1

En respuesta a la pregunta # 3:

HTTP es un protocolo que ya se ejecuta en un socket específico (normalmente utilizando el puerto 80). Un conector de Internet es un punto final que se utiliza para transportar datos entre procesos. Si desea ejecutar su propio protocolo, deberá crear un nuevo socket (con TCP o UDP) en un puerto específico.

Sin embargo, esto requerirá que cree su propio cliente y servidor para intercambiar datos entre ellos.

Para comenzar, here es un ejemplo de cliente-servidor muy simple en C# utilizando un socket personalizado.

¡Buena suerte!

0

Primero, me gustaría decir que parece que tiene algunos requisitos poco claros que probablemente debería aclarar con su jefe. Si no está exactamente seguro de lo que quiere decir, debe averiguarlo porque nada apesta más que tener que respaldar la interpretación creativa de los requisitos por parte de alguien.

1) Parece que su jefe solo quiere una manera de cambiar fácilmente las asociaciones para probar sin tener que reconstruir la aplicación, por lo que le pide que almacene esas asociaciones en un archivo xml/ini que pueda modificarse fácilmente. En C# puedes ir fácilmente entre los objetos XML y DataSet así que esto debería ser trivial. Primero crearía la estructura de datos en un DataSet y luego usaría el método GetXml del DataSet para generar el formato xml.

2) En .NET puede almacenar objetos en Caché y crear una Dependencia de caché que sea una asociación de archivos. Por lo tanto, cada vez que se modifica el archivo, la caché se purga. Cada vez que su programa maneja una solicitud, extrae el objeto de la memoria caché, si el objeto no está en la memoria caché, entonces tiene un bloque de condición que lo reconstruye desde el archivo xml/ini en el disco. Tendría esa condición bloquear llamada a una función que luego carga el formato xml mencionado anteriormente en un conjunto de datos que luego se almacena en la memoria caché con una dependencia de caché.

3) Si está intentando probar una aplicación de E/S, modificarla para utilizar una capa de transporte diferente suena como una mala idea. Si la aplicación actualmente funciona a través de HTTP para enviar solicitudes, simplemente enrute la solicitud HTTP. Sospecho que la aplicación probablemente tiene una configuración en algún lugar que define la ruta del servicio web que actualmente llama, una vez que sepa cuál es esa ruta puede cambiarla o, si eso no es posible, configurar una regla DNS en el servidor que ejecuta el aplicación para dirigirlo a la ubicación de su aplicación. En Windows esto es tan simple como agregar una línea al archivo de hosts.