未调用 CreateBehavior()

2024-01-09

我已经提到过为什么找不到我的自定义 WCF 行为扩展元素类型? https://stackoverflow.com/questions/169342/why-isnt-my-custom-wcf-behavior-extension-element-type-being-found;但以下是一个不同的问题

我有一个自定义的BehaviorExtensionElement,如下所示。运行服务时,它的构造函数被调用。但是它不会调用 CreateBehavior() 方法。因此我的 IEndpointBehavior 没有被构造。

该服务运行良好,没有任何异常。

知道为什么CreateBehavior()方法没有被调用?

注意:我正在运行 Web 服务应用程序Visual Studio 2010.

Config

  <endpointBehaviors>
    <behavior name="EndpointBehavior">
      <XMessageValidator validateRequest="True" validateReply="true" validateWSE="true">
      </XMessageValidator>
    </behavior>
  </endpointBehaviors>


 //Other config entries

<extensions>
  <behaviorExtensions>
    <add name="XMessageValidator" type="MessageInspectorLibrary.ValidationBehaviorExtensionElement, MessageInspectors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
  </behaviorExtensions>
</extensions>

行为扩展元素

public class ValidationBehaviorExtensionElement : BehaviorExtensionElement
{
    public ValidationBehaviorExtensionElement()
    {
        //Constructor
    }

    public override Type BehaviorType 
    { 
        get
        {
            return typeof(MessageValidationBehavior);
        } 
    }

    protected override object CreateBehavior()
    {
        throw new Exception("My CreateBehavior");
        return null;

    }

    [ConfigurationProperty("validateRequest", DefaultValue = false, IsRequired = false)]
    public bool ValidateRequest
    {
        get { return (bool)base["validateRequest"]; }
        set { base["validateRequest"] = value; }
    }

    [ConfigurationProperty("validateReply", DefaultValue = false, IsRequired = false)]
    public bool ValidateReply
    {
        get { return (bool)base["validateReply"]; }
        set { base["validateReply"] = value; }
    }

    [ConfigurationProperty("validateWSE", DefaultValue = false, IsRequired = false)]
    public bool ValidateWSE
    {
        get { return (bool)base["validateWSE"]; }
        set { base["validateWSE"] = value; }
    }

}

I端点行为

public class MessageValidationBehavior : IEndpointBehavior
{
    XmlSchemaSet schemaSet; 
    bool validateRequest; 
    bool validateReply;
    bool validateWSE;

    public MessageValidationBehavior(XmlSchemaSet schemaSet, bool inspectRequest, bool inspectReply, bool inspectWSE)
    {
        this.schemaSet = schemaSet;
        this.validateReply = inspectReply;
        this.validateRequest = inspectRequest;
        this.validateWSE = inspectWSE;

        throw new Exception("My MessageValidationBehavior");
    }


    #region IEndpointBehavior Members

    public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
    {
    }

    public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
    {
        ValidationMessageInspector inspector = new ValidationMessageInspector(schemaSet, validateRequest, validateReply, validateWSE, true);
        clientRuntime.MessageInspectors.Add(inspector);
    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
    {
        ValidationMessageInspector inspector = new ValidationMessageInspector(schemaSet, validateRequest, validateReply, validateWSE, false);
        endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);
    }

    public void Validate(ServiceEndpoint endpoint)
    {
    }

    #endregion
}

参考

  1. http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/6be701c0-25f9-4850-82f9-62a9b8e9ac04/ http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/6be701c0-25f9-4850-82f9-62a9b8e9ac04/

注意:正如我在问题中所说,即使没有进行以下更改,该服务也会给出正确的响应消息。此外,还调用了 ValidationBehaviorExtensionElement 类。

Solution

The CreateBehavior()当我正确设置服务名称时调用 - 即namespace.servicename.

我的理解是——BehaviorExtension无论服务名称如何,都会创建。但EndPointBehavior仅当服务名称正确时才会创建。如果您对此有一些想法/参考,欢迎提供更多详细信息。

以下是完整的 serviceModel 配置

<system.serviceModel>

<services>

  <service
          name="WcfServiceApp001.Service1"
          behaviorConfiguration="InternalPayrollBehavior">
    <endpoint address="" binding="basicHttpBinding"
              behaviorConfiguration="EndpointBehavior"
              contract="WcfServiceApp001.IService1"
              />
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="InternalPayrollBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>

  <endpointBehaviors>
    <behavior name="EndpointBehavior">
      <XMessageValidator validateRequest="True" validateReply="true" validateWSE="true">
      </XMessageValidator>
    </behavior>
  </endpointBehaviors>
</behaviors>

<extensions>
  <behaviorExtensions>
    <add name="XMessageValidator" type="MessageInspectorLibrary.ValidationBehaviorExtensionElement, MessageInspectors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
  </behaviorExtensions>
</extensions>

<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
</system.serviceModel>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未调用 CreateBehavior() 的相关文章

  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • 如何在网页上实现文件上传进度条?

    当用户将文件上传到我的网络应用程序时 我想显示比动画 gif 更有意义的内容 我还有哪些可能性 编辑 我正在使用 Net 但我不介意是否有人向我展示与平台无关的版本 如果您对这一切在客户端通常如何工作感兴趣 就是这样 所有解决方案都通过 J
  • C 中使用 getrandom 实现随机浮点数

    我试图生成一个介于 0 和 1 之间的随机浮点数 无论是在 0 1 还是 0 1 对我来说都不重要 网上关于此的每个问题似乎都涉及rand 呼叫 播种time NULL 但我希望能够每秒多次调用我的程序 并每次都获得不同的随机数 这引导我找
  • 在 Windows CE 6.0 与 Windows Mobile 6.1 下进行开发的权衡是什么

    我有一个 Windows NET 应用程序 我计划将其 移植 并定制为移动设备 该应用程序由一个独立的 NET 程序组成 该程序与条形码扫描仪配合使用 具有简单的 UI 并将扫描结果记录到文件中 还有一个 Windows 服务 可以使用 W
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行

随机推荐

  • 如何删除 VC 2008 中的“错误 C4335:检测到 Mac 文件格式”

    我现在用VC 2008编译一个项目 得到的错误如下 Error 7 error C4335 Mac file format detected please convert the source file to either DOS or U
  • 如何在 Spring MVC 测试中检查 JSON 响应

    我在 web xml 中定义了一个 servlet 因此我将其定义在 Controller 中 仅用于测试MyResource Controller public class TestMyServlet MyResource servlet
  • 开始为 JVM 分配内存

    我开始使用 Xmx上的选项java命令允许我的进程使用更多的内存 256Mb 尽管我认为我当前使用的内存少于 128Mb 我还注意到 Xms启动内存选项 默认值为 2Mb 我应该将此值设置为多少以及为什么 参考 Java http java
  • BASE64 编码和解码不起作用

    我正在 Delphi XE5 中开发 android 应用程序 我需要 BASE64 编码和解码一些字符串 这个函数对于英文字符工作正常 但是我想要编码 或任何特殊的 iso8859 2 字符编码不起作用 知道如何修复它吗 我找到了 BAS
  • 安装了测试适配器的 NUnit 单元测试未显示在测试资源管理器中

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 我已经为 VS2012 2013 安装了 NUnit 测试适配器 当我第一次安装适配器测试时 它们会显示出来 但今天由于某种原
  • 如何在 NHibernate 中克隆对象?

    NHibernate中如何实现对象 实体 克隆 每个实体类都有这样的属性 public virtual IList
  • Java (Android) 中的调试模式(正则表达式)失败

    我正在一段代码中进行模式匹配 该代码在一种情况下运行良好 但在另一种情况下则不然 目前的代码是 DLVRYrx Pattern compile d s p Letter s d s d d s d Log d TAG Regex match
  • django 模型保存 - 迁移期间未调用覆盖方法

    我的模型类中有一个保存覆盖方法 每次保存对象时都会生成一个新的 slug def save self args kwargs if self column2 self slug slugify self column1 self colum
  • before_filter 语法,当你想要“排除”控制器“abc”时

    在 Rails 中 当您想要 排除 控制器 abc 时 before filter 语法是什么 例如 在 application controller 中 如果我想说 before filter login required except
  • 如何通过代码查找黑莓中的应用程序大小?

    我想知道如何通过代码查找黑莓中的应用程序大小 我想在单击按钮时显示正在运行的应用程序名称及其大小 那么我应该怎么做 我给出了一些解释 请参阅此链接 https stackoverflow com a 9074486 914111 https
  • 手写文字识别php

    我正在考虑创建一个特定的网络系统 它涉及许多不同的 随机 人上传他们所写内容的扫描文档 有没有PHP开源方法可以将这些手写文本转换为机器文本 我找到了这个question https stackoverflow com questions
  • eax 与其他寄存器相比的不同行为

    我编写了一个小的汇编代码片段 Gas 32 位 它接受命令行参数 计算其字符并打印字符串 如果它具有一定的长度 仅用于调试目的 我对汇编比较陌生 所以我很确定我在这里错过了一些东西 因为当我将字符串存储在 eax 中时 与 ecx edx
  • 将日期时间更改为 MVC 3 C# 中的日期

    我正在使用 MVC 3 和 C 在下拉列表中显示日期时遇到问题 日期显示如下 2011年4月21日 12 00 00上午 但我只想这样格式化它们 2011年4月21日 这正是我数据库中的格式 数据库中的日期属性是日期而不是日期时间 模型中的
  • 使用底部导航 android kotlin 在片段中实现 MVVM 的最佳实践

    我正在使用 firebase 的底部导航在片段中实现 MVVM 但它不适用于我的情况 我搜索了很多解决方案 但没有解决我的问题 我在片段中实现了 viewModel 并将观察者应用于它 在 ViewModel 类中 从存储库调用返回类型为
  • LINQ:按聚合分组但仍从最新行获取信息?

    假设我有一个保存运输历史记录的表 我想编写一个查询来计算每个用户的发货量 并从该用户表中的最新条目获取发货名称 为简单起见 表结构 货件编号 会员ID 运输名称 发货日期 如何编写 LINQ C 查询来执行此操作 听起来可能想要类似的东西
  • Django/mod_wsgi/Apache - mod_wsgi 未使用为其编译的 Python 版本 - “ModuleNotFoundError:没有名为 'math' 的模块”

    我正在尝试在 Ubuntu 16 04 6 服务器上部署带有 Apache2 和 mod wsgi 的 Django 应用程序 但我正在努力让 mod wsgi 使用正确的 python 版本 我从源代码安装了 mod wsgi 并且配置它
  • 如何在MySQL中查询包含亚洲语言字符的文本?

    我有一个使用 UTF 8 字符集的 MySQL 表 其中有一个名为 WORDS 的长文本类型列 此列中的值由用户输入 长度为几千个字符 该表中有两种类型的行 在某些行中 WORDS 值是由说英语的人组成的 并且仅包含普通英语写作中使用的字符
  • 尾后一位下标的明显不足:对于原始数组和 std::vector 来说。已经果断解决了吗?

    以前已经以各种形式提出过这个问题 但是由于语言规范在这方面似乎相当动态 或者至少was当对此问题进行一些 SO 讨论时是动态的 根据最近的事态发展 如果存在 重新审视该问题可能是有意义的 所以 问题又是 是否将 下标是获取指向数组中虚构的末
  • 抑制scale_x_datetime中的警告

    这不是重复项 因为该假定重复项中的任何方法都不适用于此 它们都不会导致警告消失 事实上 我从下面的康拉德那里得到了答案 使用suppressMessages 在被断言为可能重复的链接中 他们建议suppressWarnings 这是行不通的
  • 未调用 CreateBehavior()

    我已经提到过为什么找不到我的自定义 WCF 行为扩展元素类型 https stackoverflow com questions 169342 why isnt my custom wcf behavior extension elemen