2011-02-03 10 views
5

Estoy trabajando con <gulp>código heredado escrito en .NET 3.5 utilizando servicios web ASMX.¿Está bien utilizar un proxy de servicio web ASMX de singleton?

Un servicio de Windows (llámalo FooService) está almacenando en caché estáticamente un proxy ASMX para un servicio web (llámalo BarWS) que llama en respuesta a las solicitudes de los clientes entre 10 y 30 veces por hora.

Siendo <gulp>legacy code es por varias razones increíblemente difíciles de probar. Estoy en el proceso de romper las dependencias para que sea comprobable y esta referencia estática me hizo dudar. Han pasado años desde que utilicé ASMX y recuerdo que el proxy es seguro para la ejecución de subprocesos, pero me pregunté si podría volverse inutilizable de la misma manera que los proxies singleton/compartidos de WCF cuando pueden desarrollar un problema y fallar.

Dado el uso ligero de este proxy (BarWS se llama menos de 30 veces/hora), estoy pensando que sería mucho más seguro crear un proxy nuevo en cada llamada, pero me pregunto si estaría haciendo un cambio innecesario ¿Nadie sabe?

P.S. Sé que WCF es mejor, pero la migración a WCF es demasiado cambio ahora mismo en esta base de código heredada <gulp>.

+4

'legacy' y' .NET 3.5' ​​... woah ... ¡Me siento viejo! :) –

+1

¿Cuál es la importancia del * código heredado * que está en cursiva dos veces? – Amy

+1

@James: no tiene que cambiar el servicio a WCF, pero considere cambiar para usar una "Referencia de servicio" en lugar de una "Referencia web". –

Respuesta

4

Mida cuánto tiempo se tarda en crear un proxy. Si se trata de una optimización falsa (sospecho firmemente que sí), cámbiela a creación basada en instancias. En general, es bueno evitar la estática. Póngalo detrás de una fábrica, entonces al menos usted todavía puede tener un comportamiento tipo singleton si realmente quisiera, pero este comportamiento creacional sería enmascarado e independiente del cliente.

+0

Estoy 99% seguro de que es una optimización falsa ... Aunque me gusta mucho la idea de fábrica, gracias. Estoy votando esta respuesta, pero sin marcarla, ya que no aclara la pregunta acerca de la reutilización de la instancia de proxy después de una falla. ¡Gracias! –

+0

@James Claro, no tengo idea (no recuerdo) si es con estado. Si es así, obviamente tienes un problema adicional y mayor: ¿es seguro para subprocesos? –

+0

Los documentos de MSDN afirman que es seguro para subprocesos, pero aún no lo he probado. Es bastante difícil probar eso y el comportamiento en falla ya que la única implementación del servicio es (por supuesto) un servicio de producción en vivo (sin WSDL, sin código fuente :)) Sin alejarse de eso, tendré que aplicar ingeniería inversa un falso por eso! –

Cuestiones relacionadas