можно ли использовать блок приложения проверки с сервисом WCF REST?

Я использую службу WCF REST с шаблоном ключа API и пытаюсь обеспечить проверку с помощью проверки атрибута блока приложения проверки. вот мой сервис:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[ValidationBehavior]
public class Service1
{
    [FaultContract(typeof(ValidationFault))]
    [WebGet(UriTemplate = "ValidateStuff?text={text}")]
    public void ValidateStuff(
        [NotNullValidator]
        string text)
    {
    }

и global.asax из шаблона:

public class Global : HttpApplication
    {
        void Application_Start(object sender, EventArgs e)
        {
            RegisterRoutes();
        }

        private void RegisterRoutes()
        {
            // Edit the base address of Service1 by replacing the "Service1" string below
            RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)));
        }
    }

то у меня есть клиент, отправляющий запрос GET:

HttpWebRequest invokeRequest = WebRequest.Create(String.Concat(baseUrl, "/", uri, queryString)) as HttpWebRequest;
invokeRequest.Method = Enum.GetName(typeof(Method), method); 
WebResponse response = invokeRequest.GetResponse())

теперь проблема в том, что я каждый раз получаю HTTP/1.1 500 Internal Server Error.

если я удалю атрибуты [ValidationBehavior] [FaultContract(typeof(ValidationFault))] и [NotNullValidator], тогда все будет работать нормально. Я проверил сервисную трассировку и не увидел ничего, что могло бы мне помочь.


person Nimrod Dayan    schedule 21.09.2011    source источник


Ответы (1)


Ответ в том, что это действительно возможно! Я узнал, в чем проблема. Мне не хватило ссылок на:

Microsoft.Practices.ServiceLocation.dll
Microsoft.Practices.Unity.dll
Microsoft.Practices.Unity.Interception.dll

Странно то, что я не видел никаких указаний на это ни в журнале трассировки, ни в режиме отладки. Я узнал об этом только тогда, когда пытался выполнить проверку вручную в самой реализации операции, например так:

//at this point I got the exception saying that I'm missing the above references.
var validationResult = Validation.Validate<T>(TInstance); 

Надеюсь, это поможет кому-то

person Nimrod Dayan    schedule 26.09.2011