代码之家  ›  专栏  ›  技术社区  ›  Theofanis Pantelides

WCF全局(.asax)行为

  •  2
  • Theofanis Pantelides  · 技术社区  · 14 年前

    我想创建一个全局选项,当REST调用包含&format=json时,将响应输出为json字符串。

    如果在我的方法中输入以下字符串,它会起作用:

    WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json;
    

    但是,如果我在global.asax文件中的任何地方添加这一行,我会得到当前上下文的空异常:

    String format = "";
    
    if (HttpContext.Current.Request.QueryString["format"] != null)
      format = HttpContext.Current.Request.QueryString["format"];
    
    if (String.Equals("json", format, StringComparison.OrdinalIgnoreCase))
      System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.Format = System.ServiceModel.Web.WebMessageFormat.Json;
    

    在此触发异常:

    System.ServiceModel.Web.WebOperationContext.Current
    

    有人知道我如何全局添加此功能(WCF)吗?

    1 回复  |  直到 14 年前
        1
  •  3
  •   user347569    14 年前

    您可以通过服务行为将自己的DispatchMessageInspector添加到WCF处理管道。 Here 是如何做到的。

    要首先通过配置文件应用行为,您应该从BehaviorExtensionElement派生新类,并重写成员BehaviorType和CreateBehavior。 然后添加到与之类似的配置部分(使用您的完整类型名)

    <system.serviceModel>
        <extensions>
            <behaviorExtensions>
                <add name="myBehavior" type="SomeNamespace.MyBehaviorExtensionElement, AssemblyName,
                    Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
           </behaviorExtensions>
        </extensions>
    </system.serviceModel>
    

    <behaviors>
        <behavior configurationName="myServiceBehavior">
            <myBehavior />            
        </behavior>
    </behaviors>
    

    最后将此配置应用于您的服务。