예제 #1
0
        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));
            }
        }