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)); }
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())); }