WCF-如何动态设置“ enableWebScript”?

| 我正在开发我的第一个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 \”设置?还是不可能? 更新(2011年6月1日):我还希望动态更改行为,以使用Windows凭据进行身份验证。在配置文件中,它是这样完成的:
<bindings>
  <webHttpBinding>
    <binding name=\"Binding1\">
      <security mode=\"TransportCredentialOnly\">
        <transport clientCredentialType=\"Windows\" />
      </security>
    </binding>
  </webHttpBinding>
</bindings>
这是我需要以编程方式进行的另一个设置,因为它似乎忽略了配置设置。     
已邀请:
        对我来说,在WebHttpBehaviorEx中添加以下构造函数后,它起作用了
    public  WebHttpBehaviorEx()
    {
        DefaultBodyStyle = WebMessageBodyStyle.Wrapped;
        DefaultOutgoingRequestFormat = WebMessageFormat.Json;
        DefaultOutgoingResponseFormat = WebMessageFormat.Json;
    }
    
        您应该能够以编程方式创建一个类“ 5”,并将其添加到端点的“ 6”集合中。我从未尝试过,也不知道在单个端点上定义多个行为将如何工作,但是我认为这基本上就是您在声明式配置中所做的事情。不幸的是
WebScriptEnablingBehavior
(继承自
WebHttpBehavior
)是密封的,因此您不能仅仅继承它。 更新:(从这里开始)   WebScriptEnablingBehavior是WebHttpBehavior功能的“配置文件”,专门用于与ASP.NET AJAX客户端互操作。它增加了一些AJAX原理,例如自动生成ASP.NET AJAX客户端代理的功能。 我不确定您是否真的需要使用
<enableWebScript/>
,就像Carlos所说的那样,听起来好像只在使用ASP.NET AJAX时才需要。     

要回复问题请先登录注册