Я работаю над своим первым сервисом WCF, который будет поддерживать несколько вызовов Ajax.Конечная точка настроена следующим образом:
<service behaviorConfiguration="ServiceBehavior" name="AQM">
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="Binding1" contract="IAQM" />
</service>
и моя конфигурация поведения:
<endpointBehaviors>
<behavior name="web">
<webHttp />
<enableWebScript />
</behavior>
</endpointBehaviors>
Мне нужно создать свою собственную обработку ошибок, чтобы я мог отформатировать некоторую конкретную информацию обратно вклиент (см. здесь http://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/). Мой WebServiceHostFactory выглядит следующим образом:
public class MyServiceFactory : WebServiceHostFactory
{
public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
{
var sh = new ServiceHost(typeof(AQM), baseAddresses);
sh.Description.Endpoints[0].Behaviors.Add(new WebHttpBehaviorEx());
return sh;
}
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return base.CreateServiceHost(serviceType, baseAddresses);
}
}
public class WebHttpBehaviorEx : WebHttpBehavior
{
protected override void AddServerErrorHandlers(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
// Clear default error handlers
endpointDispatcher.ChannelDispatcher.ErrorHandlers.Clear();
// Add our own error handler
endpointDispatcher.ChannelDispatcher.ErrorHandlers.Add(new ErrorHandlerEx());
}
Однако после того, как я создал свой собственный обработчик ошибок, он переопределяет настройку «enableWebScript», которую я имел в моей конфигурации вышечто, я думаю, имеет смысл, потому что теперь я динамически создаю свое собственное поведение, которое не имеет ни одной из указанных выше настроек конфигурации.
Я прочитал, что этот параметр следует использовать с WCF / Ajax в целях безопасности.(см. здесь http://www.asp.net/ajaxlibrary/Using%20JSON%20Syntax%20with%20Ajax.ashx). Итак, мой вопрос: как я могу установить параметр «enableWebScript» для своего динамически создаваемого поведения? Или это невозможно?
Обновление (01.06.2011)Я также хочу динамически изменить поведение для использования учетных данных Windows для проверки подлинности. В файле конфигурации это делается так:
<bindings>
<webHttpBinding>
<binding name="Binding1">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</webHttpBinding>
</bindings>
Это не такее настройки мне нужно сделать программно, так как кажется, что игнорируются настройки конфига.