Example #1
0
        private static void ThrowForUnboundResponseHandler(HttpOperationHandler handler, HttpParameter parameter, string operationName)
        {
            Fx.Assert(handler != null, "The 'handler' parameter should not be null.");
            Fx.Assert(parameter != null, "The 'parameter' parameter should not be null.");
            Fx.Assert(operationName != null, "The 'operationName' parameter should not be null.");

            string exceptionMessage = null;

            if (parameter.ValueConverter.CanConvertFromString)
            {
                exceptionMessage = SR.ResponseHandlerWithNoPossibleBindingForStringConvertableType(
                    HttpOperationHandler.HttpOperationHandlerType.Name,
                    handler.ToString(),
                    operationName,
                    parameter.Name,
                    parameter.Type.Name,
                    handler.GetType().Name);
            }
            else
            {
                exceptionMessage = SR.ResponseHandlerWithNoPossibleBindingForNonStringConvertableType(
                    HttpOperationHandler.HttpOperationHandlerType.Name,
                    handler.ToString(),
                    operationName,
                    parameter.Name,
                    parameter.Type.Name,
                    handler.GetType().Name);
            }

            Fx.Assert(exceptionMessage != null, "The 'exceptionMessage' variable should have been set.");
            throw Fx.Exception.AsError(new InvalidOperationException(exceptionMessage));
        }
Example #2
0
        private static void ThrowForMulitpleTypeOnlyBindings(List <HttpParameterBinding> tentativeBindings, string operationName)
        {
            Fx.Assert(tentativeBindings != null, "The 'tentativeBindings' parameter should not be null.");
            Fx.Assert(tentativeBindings.Count > 0, "The 'tentativeBindings' list should not be empty.");
            Fx.Assert(operationName != null, "The 'operationName' parameter should not be null.");

            string               exceptionMessage = null;
            HandlerType          inHandlerType    = tentativeBindings[0].InputHandlerType;
            HttpOperationHandler inHandler        = tentativeBindings[0].InputHandler;
            HttpParameter        inParameter      = tentativeBindings[0].InputParameter;

            switch (inHandlerType)
            {
            case HandlerType.Request:
                exceptionMessage = SR.RequestHandlerWithMultipleTypeOnlyBindings(
                    HttpOperationHandler.HttpOperationHandlerType.Name,
                    inHandler.ToString(),
                    operationName,
                    inParameter.Name,
                    inParameter.Type.Name);
                break;

            case HandlerType.ServiceOperation:
                exceptionMessage = SR.ServiceOperationWithMultipleTypeOnlyBindings(
                    operationName,
                    inParameter.Name,
                    inParameter.Type.Name,
                    HttpOperationHandler.HttpOperationHandlerType.Name);
                break;

            case HandlerType.Response:
                exceptionMessage = SR.ResponseHandlerWithMultipleTypeOnlyBindings(
                    HttpOperationHandler.HttpOperationHandlerType.Name,
                    inHandler.ToString(),
                    operationName,
                    inParameter.Name,
                    inParameter.Type.Name);
                break;

            default:
                Fx.Assert("The handlerType should have been one of the above cases.");
                break;
            }

            StringBuilder stringBuilder = new StringBuilder(exceptionMessage);

            foreach (HttpParameterBinding binding in tentativeBindings)
            {
                string               parameterMessage = null;
                HandlerType          outHandlerType   = binding.OutputHandlerType;
                HttpOperationHandler outHandler       = binding.OutputHandler;
                HttpParameter        outParameter     = binding.OutputParameter;

                switch (outHandlerType)
                {
                case HandlerType.Request:
                    parameterMessage = SR.RequestHandlerTypeOnlyOutputParameter(
                        HttpOperationHandler.HttpOperationHandlerType.Name,
                        outHandler.ToString(),
                        outParameter.Name,
                        outParameter.Type.Name);
                    break;

                case HandlerType.ServiceOperation:
                    parameterMessage = SR.ServiceOperationTypeOnlyOutputParameter(
                        outParameter.Name,
                        outParameter.Type.Name);
                    break;

                case HandlerType.Response:
                    parameterMessage = SR.ResponseHandlerTypeOnlyOutputParameter(
                        HttpOperationHandler.HttpOperationHandlerType.Name,
                        outHandler.ToString(),
                        outParameter.Name,
                        outParameter.Type.Name);
                    break;

                default:
                    Fx.Assert("The handlerType should have been one of the above cases.");
                    break;
                }

                stringBuilder.Append(Environment.NewLine);
                stringBuilder.Append(parameterMessage);
            }

            throw Fx.Exception.AsError(new InvalidOperationException(stringBuilder.ToString()));
        }