public T GetService <T>(string scope, TimeoutSettings timeoutSettings) where T : class { var serviceName = typeof(T).GetServiceName(); if (topology.GetEndPoint(serviceName, scope) == settings.EndPoint) { var implementation = serviceImplementationContainer.GetImplementation(serviceName, scope).Implementation; // todo: notready timeouts return((T)implementation); } return(serviceProxyContainer.GetProxy <T>(scope, timeoutSettings)); }
public async Task <Response> Process(Request request) { try { logger.IncomingRequest(request); var startTime = DateTime.Now; var implementationInfo = serviceImplementationContainer.GetImplementation(request.Path.ServiceName, request.ServiceScope); var methodHandler = handlerContainer.GetHandler(implementationInfo.Description, request.Path); var responseData = await methodHandler.Handle(implementationInfo.Implementation, request.Data, 0); var executionTime = DateTime.Now - startTime; logger.ProcessedRequestSuccessfully(request, executionTime); return(new Response(ResponseStatus.Ok, responseData)); } catch (ServiceNotReadyException) { logger.ProcessNotReady(request); return(Response.NotReady); } catch (ServiceNotFoundException) { logger.ProcessedRequestWithBadStatus(request, ResponseStatus.ServiceNotFound); return(Response.NotFound); } catch (InvalidPathException) { logger.ProcessedRequestWithBadStatus(request, ResponseStatus.BadRequest); return(Response.BadRequest); } catch (InvalidImplementationException) { logger.ProcessedRequestWithBadStatus(request, ResponseStatus.InvalidImplementation); return(Response.InvalidImplementation); } catch (Exception ex) { logger.ProcessedRequestWithException(request, ex); var responseData = exceptionCodec.EncodeSingle(ex); return(new Response(ResponseStatus.Exception, responseData)); } }