при использовании Enterprise Library в приложении-службе WCF мы сталкиваемся со следующим исключением, когда пытаемся использовать проверку для операции, аргументы которой передаются по ссылке:
Контракт операции:
Hubs GetRoute(
string sourceDepotId,
[NotNullValidator(MessageTemplate = "...")]
[RegexValidator("[a-zA-Z]", MessageTemplate = "...")]
[StringLengthValidator(2, RangeBoundaryType.Inclusive, 2, RangeBoundaryType.Inclusive, MessageTemplate = "...")]
string countryCode,
string zipCode,
DateTime shippingDate,
DateTime? deliveryDate,
ref RoutingCodes routingCode,
out string errorMessage);
Исключение:
Тип 'RoutingCodes &' нельзя использовать в качестве аргумента типа.
[ArgumentException: The type 'RoutingCodes&' may not be used as a type argument.]
System.RuntimeType.ThrowIfTypeNeverValidGenericArgument(RuntimeType type) +14240432
System.RuntimeType.SanityCheckGenericArguments(RuntimeType[] genericArguments, RuntimeType[] genericParamters) +57
System.RuntimeType.MakeGenericType(Type[] instantiation) +218
Microsoft.Practices.EnterpriseLibrary.Validation.ValidatorFactory.WrapAndInstrumentValidator(Validator validator, Type type) +87
Microsoft.Practices.EnterpriseLibrary.Validation.ValidatorFactory.FindOrCreateValidator(ValidatorCacheKey cacheKey, Func`3 wrapAndInstrument) +190
Microsoft.Practices.EnterpriseLibrary.Validation.ValidatorFactory.CreateValidator(Type targetType, String ruleset) +176
Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.ValidationParameterInspector.CreateInputParameterValidator(ParameterInfo param, String ruleSet) +99
Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.ValidationParameterInspector..ctor(OperationDescription operation, String ruleSet) +221
Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.ValidationBehavior.ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime) +161
System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) +5106
System.ServiceModel.ServiceHostBase.InitializeRuntime() +85
System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) +48
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) +293
System.ServiceModel.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity) +129
System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity) +733
Указанный тип является типом перечисления.Я знаю, что вы на самом деле можете передавать аргументы по ссылке в WCF, и это работает, как указано в документации .
Это ошибка в блоке проверки библиотеки предприятия или что мы делаем неправильно?Как вы обходите исключение, кроме того, что не используете блок проверки?