Advertisement
Guest User

Untitled

a guest
Aug 26th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.01 KB | None | 0 0
  1. public class GenericProxy<T> : ClientBase<T> where T : class
  2. {
  3. T _channel;
  4.  
  5. public GenericProxy(string endpoint)
  6. : base(endpoint)
  7. {
  8. }
  9.  
  10. public static ICredencialUsuario Credencial
  11. {
  12. set { Configurador.Instancia.Credencial = value; }
  13. }
  14.  
  15. protected override T CreateChannel()
  16. {
  17. try
  18. {
  19. if (Configurador.Instancia.Credencial == null)
  20. {
  21. if (ChannelFactory.Credentials != null) ChannelFactory.Credentials.UserName.UserName = "dummy";
  22. }
  23. else
  24. {
  25. if (ChannelFactory.Credentials != null)
  26. {
  27. ChannelFactory.Credentials.UserName.UserName = Configurador.Instancia.Credencial.Usuario;
  28. ChannelFactory.Credentials.UserName.Password = Configurador.Instancia.Credencial.Clave;
  29. }
  30. }
  31.  
  32. _channel = base.CreateChannel();
  33.  
  34. return _channel;
  35. }
  36. catch (Exception ex)
  37. {
  38. throw new Exception("Error al crear el canal de comunicaciones del GenericProxy.", ex);
  39. }
  40. }
  41.  
  42. public T Proxy
  43. {
  44. get { return Channel; }
  45. }
  46.  
  47. public void InvocarOperacion(Action<T> action)
  48. {
  49. InvocarOperacion(action, false); //invocacion no asincrona
  50. }
  51.  
  52. public void InvocarOperacionAsincrona(Action<T> action)
  53. {
  54. InvocarOperacion(action, true); //invocacion asincrona
  55. }
  56.  
  57. private void InvocarOperacion(Action<T> action, bool asincrono)
  58. {
  59.  
  60. T client = CreateChannel();
  61.  
  62. try
  63. {
  64. DateTime comienzo = DateTime.Now;
  65. action(client);
  66.  
  67. ClientCredentials clientCredentials = ChannelFactory.Credentials;
  68. if (clientCredentials != null)
  69. Log.logDebug("GenericProxy", String.Format("Usuario {2} y Metodo {3} : Comienzo {0} Fin {1}", comienzo.ToString("HH:mm:ss-ffff"), DateTime.Now.ToString("HH:mm:ss-ffff"),
  70. clientCredentials.UserName.UserName,
  71. action.Method.Name));
  72.  
  73. //si la petición no es asincrona se cierra el canal
  74. if (!asincrono)
  75. {
  76. ((IClientChannel)client).Close();
  77. }
  78. }
  79. catch (MessageSecurityException mex)
  80. {
  81. ((IClientChannel)client).Abort();
  82. //si no hay un usuario valido, ha habido un fallo durante el proceso de validación, por lo que no se puede continuar
  83. if ((Configurador.Instancia.Credencial == null) || (Configurador.Instancia.Credencial.Usuario == null) || (Configurador.Instancia.Credencial.Usuario.Length == 0))
  84. {
  85. OnOperacionError(mex);
  86. }
  87. else //ya existia un usuario valido, con lo que la sesion ha caducado
  88. {
  89. OnSesionCaducada();
  90. }
  91. }
  92. catch (FaultException<ErrorServicio> ex)
  93. {
  94. ((IClientChannel)client).Abort();
  95. if (ex.Detail.TipoExcepcion.Equals(typeof(ValidationException).FullName))
  96. {
  97. ValidationException error = new ValidationException(ex.Detail.Mensaje) {CodigoError = ex.Detail.Id};
  98. throw error;
  99. }
  100. if (ex.Detail.TipoExcepcion.Equals(typeof(SecurityException).FullName))
  101. {
  102. SecurityException error = new SecurityException {CodigoError = ex.Detail.Id};
  103. throw error;
  104. }
  105. if (ex.Detail.TipoExcepcion.Equals(typeof(ServiceException).FullName))
  106. {
  107. ServiceException error = new ServiceException(ex.Detail.Mensaje);
  108. // Comprobamos si hay aviso de triger en base de datos para mostrar su mensaje
  109. if (ex.Detail != null && ex.Detail.Data != null && ex.Detail.Data.Contains("Triger"))
  110. DevExpress.XtraEditors.XtraMessageBox.Show(ex.Detail.Data["Triger"].ToString());
  111. OnOperacionError(error);
  112. }
  113. if (ex.Detail.TipoExcepcion.Equals(typeof(MessageSecurityException).FullName))
  114. {
  115. OnSesionCaducada();
  116. }
  117.  
  118. }
  119. catch (CommunicationException e)
  120. {
  121. ((IClientChannel)client).Abort();
  122. OnOperacionError(e);
  123. }
  124. catch (Exception e)
  125. {
  126. ((IClientChannel)client).Abort();
  127. OnOperacionError(e);
  128. }
  129.  
  130. }
  131.  
  132. public void CloseChannel()
  133. {
  134. ICommunicationObject canal = _channel as ICommunicationObject;
  135. if (canal != null)
  136. canal.Close();
  137. }
  138.  
  139. private void OnOperacionError(Exception ex)
  140. {
  141. Configurador.Instancia.OnOperacionError(ex);
  142. }
  143.  
  144. private void OnSesionCaducada()
  145. {
  146. Configurador.Instancia.OnSesionCaducada();
  147. }
  148. }
  149.  
  150. [ServiceContract]
  151. //[ServiceKnownType("GetKnownTypes", typeof(KnownTypesProvider))]
  152. public interface IContratoService
  153. {
  154. [OperationContract]
  155. ColeccionNegocioBase<ContratoEntidad> ObtenerContratos(ContratoFiltro filtroContrato, OrdenFiltro filtroOrden, bool completo);
  156.  
  157. [OperationContract]
  158. ContratoEntidad EmitirContrato(ContratoEntidad contrato, bool esContratoTv);
  159.  
  160. [OperationContract]
  161. ContratoEntidad ReEmitirContrato(ContratoEntidad contrato);
  162.  
  163. [OperationContract]
  164. ContratoEntidad ModificarContrato(ContratoEntidad contrato, List<string> liCampos);
  165.  
  166. [OperationContract]
  167. ColeccionNegocioBase<ContratoEntidad> CancelacionContratos(ColeccionNegocioBase<OrdenEntidad> coleccion);
  168.  
  169. [OperationContract]
  170. ColeccionNegocioBase<ContratoEntidad> CancelacionCondicionalContratos(ColeccionNegocioBase<OrdenEntidad> coleccion);
  171.  
  172. [OperationContract]
  173. ColeccionNegocioBase<ContratoEntidad> CancelacionContratosTv(ColeccionNegocioBase<OrdenTVPresentacionEntidad> coleccion);
  174.  
  175. [OperationContract]
  176. ColeccionNegocioBase<ContratoEntidad> CancelacionCondicionalContratosTv(ColeccionNegocioBase<OrdenTVPresentacionEntidad> coleccion);
  177.  
  178. [OperationContract]
  179. ColeccionNegocioBase<ContratoEntidad> EmisionContratos(ColeccionNegocioBase<OrdenEntidad> coleccion);
  180.  
  181. [OperationContract]
  182. ColeccionNegocioBase<ContratoEntidad> EmisionContratosTv(ColeccionNegocioBase<OrdenTVPresentacionEntidad> coleccion, PlanificacionTVEntidad mPlanificacion);
  183.  
  184. [OperationContract]
  185. ColeccionNegocioBase<ContratoEntidad> EmisionContratosTvSinPlanificacion(ColeccionNegocioBase<OrdenTVPresentacionEntidad> coleccion);
  186.  
  187. [OperationContract]
  188. ColeccionNegocioBase<ContratoEntidad> ReemisionContratos(ColeccionNegocioBase<OrdenEntidad> coleccion);
  189.  
  190. [OperationContract]
  191. int NumeroOrdenesContrato(int codigoContrato);
  192.  
  193. [OperationContract]
  194. ColeccionNegocioBase<ContratoEntidad> ObtenerContratosDisponibles(ContratoFiltro filtroContrato);
  195.  
  196. [OperationContract]
  197. void ActualizarObservacionesContrato(ColeccionNegocioBase<ContratoEntidad> coleccion, string pObservaciones);}
  198.  
  199. <endpoint address="http://localhost:8731/MMS/ContratoServicio.svc"
  200. binding="wsHttpBinding"
  201. bindingConfiguration="WindowsBinding_Service"
  202. behaviorConfiguration="ComunBehavior"
  203. contract="HM.MMS.Contrato.Interfaces.IServicios.IContratoService"
  204. name="ContratoService" />
  205.  
  206. <service behaviorConfiguration="ComunBehavior" name="HM.MMS.Implementacion.Servicio.ContratoService">
  207. <endpoint address="/mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  208. <endpoint address="" binding="wsHttpBinding" bindingConfiguration="WindowsBinding_Service" contract="HM.MMS.Contrato.Interfaces.IServicios.IContratoService">
  209. <identity>
  210. <dns value="localhost" />
  211. </identity>
  212. </endpoint>
  213. </service>
  214.  
  215. public static SingleListEntity<int> EmitirOrdenesEx(List<int> ordenes, Usuario usuario)
  216. {
  217. SingleListEntity<int> result = null;
  218. using (var servicio = new GenericProxy<IContratoService>(NombreServicio.CONTRATO_SERVICE))
  219. {
  220. servicio.InvocarOperacion(delegate(IContratoService serv)
  221. {
  222. result = serv.EmitirOrdenesEx(ordenes, usuario);
  223. });
  224. }
  225. return result;
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement