primero que hay que echar un vistazo a las aspectos legales de su situación: si el contrato con su cliente le permiten restringir el acceso del cliente?
Esta pregunta está fuera del alcance de SO, pero debe encontrar una manera de responderla. Porque si estás legalmente obligado a procesar todas las solicitudes, entonces no hay forma de evitarlo.Además, el análisis legal de su situación puede incluir algunas limitaciones, de modo que puede restringir el acceso. Eso, a su vez, tendrá un impacto en su solución.
Dejando a un lado todas estas cuestiones, y simplemente centrándose en los aspectos técnicos , ¿utiliza algún tipo de autenticación de usuario? (En caso negativo, ¿por qué no?) Si lo hace, puede implementar cualquier esquema que decida usar por usuario, que creo que sería la solución más limpia (no necesita confiar en las direcciones IP, que es una de alguna manera fea solución).
Una vez que tenga su forma de identificar a un solo usuario, puede implementar varias restricciones. Los puño que vienen a la mente son los siguientes:
- procesamiento síncrono
Sólo iniciar el procesamiento de una solicitud después de que todas las solicitudes anteriores han sido procesados. Esto incluso puede implementarse con nada más que una declaración lock
en su método de procesamiento principal. Si opta por este tipo de enfoque,
- Demora de tiempo entre las solicitudes de procesamiento
Requiere que después de una llamada de proceso, se pase un tiempo específico antes de que se permita la próxima llamada. La solución más fácil es almacenar una marca de tiempo LastProcessed
en la sesión del usuario. Si opta por este enfoque, debe comenzar a pensar en cómo responder cuando ingrese una nueva solicitud antes de permitir su procesamiento: ¿envía un mensaje de error a la persona que llama? Creo que deberías ...
EDITAR
La declaración lock
, explicó brevemente:
Está destinado a ser utilizado para la seguridad de las operaciones de rosca. la sintaxis es la siguiente:
lock(lockObject)
{
// do stuff
}
Los lockObject
tiene que ser un objeto, normalmente un miembro privado de la clase actual. El efecto es que si tiene 2 hilos que desean ejecutar este código, el primero en llegar a la declaración lock
bloquea el lockObject
. Mientras hace sus cosas, el segundo hilo no puede adquirir un bloqueo, ya que el objeto ya está bloqueado. Así que simplemente se queda allí y espera hasta que el primer hilo suelta el bloqueo cuando sale del bloque en el }
. Solo entonces puede el segundo hilo bloquear el lockObject
y hacer sus cosas, bloqueando el lockObject
para cualquier tercer hilo que se presente, hasta que también salga del bloque.
Cuidado, todo el tema de la seguridad de hilos no es nada trivial. (Se podría decir que la única cosa trivial de ello son los numerosos errores triviales un programador puede hacer ;-) See here para una introducción a rosca en C#
Otra idea, Actualización de la sesión de este usuario: –
supongo que tiene algún tipo de "a granel" "agregar método? – Phil
Sí, hay ... –