【问题标题】:WCF Global(.asax) BehaviorWCF 全局(.asax)行为
【发布时间】:2010-05-25 10:01:15
【问题描述】:

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

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

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

但是,如果我在 Global.asax 文件中的任何位置添加这一行,我会得到当前上下文的 nullException:

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)?

【问题讨论】:

  • 我不一定需要将此添加到 Global.asax。我只需要它是全球性的,这样它将影响所有 450 个操作。

标签: wcf rest c#-4.0


【解决方案1】:

您可以通过服务行为将自己的 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>

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

【讨论】:

  • 我创建了这个,但它只是忽略了它的存在。有什么想法吗?
  • 可能行为未正确附加到服务。你可以展示你是如何做到的,我想我能提供帮助。
  • 我认为问题在于将它添加到 web.config 我需要添加什么,所以它不再忽略我?
  • 解析器错误消息:配置中的元素无效。扩展“myBehavior”不是从正确的扩展基类型“System.ServiceModel.Configuration.BehaviorExtensionElement”派生的。
  • 检查您的扩展类型是否正确指定。 'myBehavior' 是您的扩展类的名称吗?
猜你喜欢
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
相关资源
最近更新 更多