用于压缩的 WCF 自定义绑定

2024-01-01

遵循样本压缩 http://msdn.microsoft.com/en-us/library/ms751458.aspx由微软。我已将编码器、编码器工厂和绑定元素添加到我的解决方案中。与他们的示例的不同之处在于,我们不通过配置文件(要求)注册端点,而是使用自定义服务主机工厂。

服务主机:

protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
     ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses);

     if (host.Description.Endpoints.Count == 0)
     {
          host.AddDefaultEndpoints();
     }

     host.Description.Behaviors.Add(new MessagingErrorHandler());      

     return host;
}

因此,我尝试的是将自定义绑定添加到我的端点,但要使用绑定注册该端点,看起来我必须使用AddServiceEndpoint但这需要一个未知的接口。我知道我可以获得 serviceType 实现的所有接口并执行getInterfaces()[0],但这对我来说似乎是一种不安全的方法。 那么有没有一种方法可以使用自定义绑定注册我的端点而不知道接口,或者是否有我应该采取的更好的方法。

我尝试添加自定义绑定:

CustomBinding compression = new CustomBinding();
compression.Elements.Add(new GZipMessageEncodingBindingElement());
foreach (var uri in baseAddresses)
{
     host.AddServiceEndpoint(serviceType, compression, uri);//service type is not the interface and is causing the issue
}

您的自定义绑定需要一个传输绑定元素;目前您只有一个消息编码绑定元素。您可能需要添加一个HttpTransportBindingElement也到您的自定义绑定:

CustomBinding compression = new CustomBinding(
    new GZipMessageEncodingBindingElement()
    new HttpTransportBindingElement());

至于从服务类型查找接口,没有内置逻辑。 WebServiceHostFactory 中使用的逻辑类似于下面所示的逻辑(此代码深入 1 继承/实现级别,但理论上您也可以更深入。

    private Type GetContractType(Type serviceType) 
    { 
        if (HasServiceContract(serviceType)) 
        { 
            return serviceType; 
        } 

        Type[] possibleContractTypes = serviceType.GetInterfaces() 
            .Where(i => HasServiceContract(i)) 
            .ToArray(); 

        switch (possibleContractTypes.Length) 
        { 
            case 0: 
                throw new InvalidOperationException("Service type " + serviceType.FullName + " does not implement any interface decorated with the ServiceContractAttribute."); 
            case 1: 
                return possibleContractTypes[0]; 
            default: 
                throw new InvalidOperationException("Service type " + serviceType.FullName + " implements multiple interfaces decorated with the ServiceContractAttribute, not supported by this factory."); 
        } 
    } 

    private static bool HasServiceContract(Type type) 
    { 
        return Attribute.IsDefined(type, typeof(ServiceContractAttribute), false); 
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于压缩的 WCF 自定义绑定 的相关文章

  • 匹配所有有效格式 IPv6 地址的正则表达式

    乍一看 我承认这个问题看起来像是这个问题以及与之相关的任何其他问题的重复 匹配有效 IPv6 地址的正则表达式 https stackoverflow com questions 53497 regular expression that
  • 如何保证单向方法的可靠性?

    The 关于单向调用 回调和事件您需要了解的信息 http msdn microsoft com en us magazine cc163537 aspx文章讲述 客户端不关心调用结果的事实并不意味着客户端根本不关心调用是否发生 一般来说
  • 使用 XML 的 WCF 请求验证

    我有一个WCF使用 Net 4 0框架的SOAP Web服务 我在用contract first方法 即 服务代码是使用 WCSF Blue 工具从手写 WSDL 生成的 我对请求消息有以下要求 如果价格小于 100 则不得有税项 但如果大
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • 使用另一个 MEF 程序集中的类而不引用它

    我有 2 个 MEF 组件 设其为A成分和B成分 我需要的是能够从组件 A 中的组件 B 访问一个类 而不需要引用它 然后我想手动实例化该类的对象 目前我看到 MEF 允许使用 Import 自动实例化对象 它使用需要引用的接口 我可以使用
  • 从 WCF REST 获取错误详细信息

    我有一个由 Net WCF 客户端使用的 REST 服务 遇到错误时 REST 服务会返回 HTTP 400 错误请求 响应正文包含 JSON 序列化详细信息 如果我使用 Fiddler Javascript 或直接从 C 执行请求 我可以
  • 如何为 WCF IErrorhandler 设置 web.config

    无法使用正确的 web config 将 IErrorHandler 集成到我的项目中 我有一个成功工作的 WCF 正在被 net 4 中的 webclient 使用 但是当尝试将 IErrorhandler 设置为全局错误记录器作为我所有
  • WCF流模式确实很慢

    我想知道为什么流模式下的 WCF 与缓冲模式相比确实很慢 基本上 我从服务器读取大量数据 数据库访问 然后通过 WCF 将大量数据传输到其他客户端 我通过比较两种不同的传输模式进行了一些测试和基准测试 我创建了 2 个端点 第一个正在使用t
  • 多个 WCF 服务实现相同的服务契约接口

    多个wcf服务是否可以实现同一个服务契约接口 我想要做的是允许测试服务与真实服务互换 并指定在配置文件中使用哪个服务 例如 ServiceContract public interface IUselessService Operation
  • WCF 客户端 - 如何处理或忽略 MustUnderstand 标头元素?

    我正在写一个WCF使用 WS Security 使用非 Net Web 服务的客户端 服务的响应包含一个 Security 标头 其中 MustUnderstand 设置为 true 使用 ServiceModelListener 我确实看
  • 将 .NET 类库(主要定义 CRUD 操作)公开为服务

    公开现有内容的最佳 有效和最快的方法是什么 类 图书馆 主要定义 CRUD 操作 作为service 周转基金服务 or WCF数据服务 以便它可以与银光 or Ajax 在那儿tools 代码生成器 RAD 工具 哪些可以支持这个 预先感
  • 如何在没有 ServiceHost 类的情况下使用 WCF 创建简单的 Web 服务器?

    我已经开始学习 WCF 并希望通过直接使用通道堆栈创建一个简单的 Web 服务器来了解其内部结构 我在网络上找到了很多理论 但我希望看到一个接收和响应 httprequest 的工作示例代码 我可以使用任何浏览器进行测试 我希望能够通过组装
  • .NET 4.0 代码可以与 .NET 2.0 代码互操作吗?

    NET 4 0 程序集调用 NET 2 0 程序集中的代码是否存在兼容性障碍 反之亦然 更具体地说 我正在研究在使用基于 NET 2 0 的第三方应用程序时升级到 Visual Studio 2010 该应用程序可通过引用我的自定义代码的挂
  • 将包含驱动器号的相对路径转换为 ​​.NET 文件函数的绝对路径

    如何转换驱动器相对路径 例如D test xml进入绝对路径 例如函数XDocument Load 会接受 D盘可能有D data作为其当前工作目录 例如 soD test xml意思是D data test xml 我已经尝试过这样的混合
  • 在 WCF 中通过 net.pipe 运行多个服务

    我正在构建一个分布式应用程序 需要 6 种不同的服务 我必须使用 Visual Studio 2008 在我的 XP 笔记本电脑上演示该应用程序 是否可以同时在 localhost 上运行多个服务 所有服务都使用 net pipe 例如 n
  • WCF 回调通道被过早处置?

    我的应用程序正在使用带有回调通道的 net tcp WCF 服务 由于某种原因 我无法发送事件回调 这就是我正在做的事情 所有代码都在服务器端 初始化时 OperationContext Context get protected set
  • Android Json结果处理

    我有这样的 Json 结果 array getJSONObject j 执行代码 WAT2 FreeIssuePrefix DisPaySchedulePrefix NextFreeIssueNo 1 NextReturnNo 20 Upl
  • WCF - 将空元素转换为可为空的本机类型

    将 SOAP 字段元素留空会导致本机类型出现强制转换错误 遗憾的是 由于客户端限制 无法使用 xsi nil true 将 WCF 协定本机类型标记为 nullable 似乎不足以阻止将以下错误返回给客户端 字符串 不是有效的布尔值 在 S
  • 异步调用的任务限制?

    我有一个同步工作的 NET 4 5 WCF 客户端 我正在更新它以使用新的异步 等待功能来进行多个同时服务器调用以同时获取数据块 在结束之前 我担心同时运行的所有线程将使服务器饱和 更不用说明年升级到该角色时会终止我的 Azure 辅助角色
  • 如何在 C# 中向肥皂信封添加命名空间

    我想向我的肥皂信封添加命名空间设置 我想在 IClientMessageInspector 的 BeforeSendRequest 中更改它 或者您有更优雅的方法 例如

随机推荐

  • 在 React 组件之间共享类实例对象

    比如说 如果我有一个使用单例模式实现的网络管理器类 export default class Manager private static Instance Manager public static get Instance Manage
  • “all (==1) [1,1..]”不终止的数学意义是什么?

    直觉上 我希望得到 数学 答案all 1 1 1 to be True因为列表中仅包含 1 的所有元素都等于 1 但是我理解 计算上 评估无限列表以检查每个元素实际上是否等于 1 的过程永远不会终止 因此表达式而是 评估 到底部或 我发现这
  • 为什么 emacs 24 找不到我添加的自定义主题?

    我的整个 emacs 设置是here https github com metaperl emacs 我加载了 init theme el 文件here https github com metaperl emacs blob master
  • 在 Yii 框架中,如何组合列并在下拉列表中显示为显示字符串

    我有一个dropDownList在我看来 它的人口来自clients表 该表包含类似的列first name last name id等等 现在我想展示first name and last name作为显示文本和id作为下拉列表中的值 我
  • 使用 jquery 返回上一页而不刷新,而不是 angularjs

    我正在本地运行一个脚本 在其中一个函数中 它会转到不同的页面 一旦完成 我希望它返回到上一页并继续在本地运行脚本 有没有办法在不刷新页面的情况下返回上一页 我用了parent history back 这将返回到上一页 但会刷新页面 以便我
  • Javadoc:package.html 或 package-info.java

    当尝试创建包级 Javadoc 注释时 首选方法是什么 你做什么工作 包信息 java Pros Newer Cons 滥用类 类用于代码 而不仅仅是注释 包 html Pros HTML 扩展意味着它不是代码 IDE 文本编辑器中的语法突
  • angularjs 一个元素上有两个指令

    我有两个指令 Generated by CoffeeScript 1 6 3 app directive focusMe function return scope focus focusMe link function scope ele
  • 获取 JPanel 上单击位置的颜色?

    我只想要一种在单击的像素为白色时激活的方法 我将如何实施这个 试图寻找一种返回坐标颜色的方法 但我找不到 依靠 如果你有一个缓冲图像 http java sun com j2se 1 4 2 docs api java awt image
  • 在 MVC 中上传文件时,字符串或二进制数据会被截断

    该文件只有 14kb 14 000 字节 我读过varbinary max 列类型 这就是我正在使用的 仅支持 8 000 字节 那是对的吗 如何将我的文件上传到数据库 if file ContentLength lt 3 1048576
  • 如何从非英语值创建一个 slug?

    我有模型Author有字段名字 姓氏 我想添加另一个字段 slug 它将包含字段串联的段 但是 这些字段包含非英语字符 我需要一个英语符号来创建链接模板 本地主机 作者 str slug 我该如何实施 要解决这个问题 您可以使用unidec
  • Docker - 无法在卷内的容器之间共享数据(docker-compose 3)

    我现在有一些用于 Web 应用程序的容器 nginx gunicorn postgres 和节点 用于从源代码构建静态文件和 React 服务器端渲染 在节点容器的 Dockerfile 中 我有两个步骤 构建和运行 Dockerfile
  • 使用 Rails 导入 gmail/yahoo/hotmail/aol 地址簿

    我想从 gmail hotmail yahoo 和 aol 地址簿中导入用户的地址簿 我正在 Rails 中寻找可以帮助我做到这一点的 gem 插件 任何帮助表示赞赏 Thanks 我一直在努力Contacts http github co
  • 从 Firebase 获取数据

    我正在尝试从 Firebase 获取数据 我尝试过这样的操作 FIREBASE REF childByAppendingPath tasks observeEventType Value withBlock snapshot gt Void
  • 如何让表头透明?

    我花了很多时间来解决这个问题 但仍然不明白我做错了什么 我需要我的标题是透明的 没有背景 举个例子 但我不明白透明度是如何工作的 我已经尝试了一切 但它总是白色的 透明度仅适用于文本 帮帮忙 我真的很期待 body margin 0 fon
  • 弹性容器内的居中元素正在增长并溢出到顶部之外[重复]

    这个问题在这里已经有答案了 我一定忘记了垂直和水平居中弹性盒的一些基本知识 容器位于具有垂直滚动的父级内 当容器变得太高时 它会超出父级顶部 从而剪切内容 底部保持原状 尝试调整视图的高度或添加更多线条以查看其实际效果 body html
  • 无法从 Microsoft Dynamics CRM WebAPI 调用 BulkDelete 操作

    我正在尝试致电批量删除 操作 https learn microsoft com en us previous versions dynamicscrm 2016 developers guide mt491158 v 3Dcrm 8 本地
  • 更改分支点

    我有一个分支叫feature它有一些提交 分支及其提交仍然位于我的机器本地 还没有push编辑到公共存储库 该图看起来像 A B C D E F G master P Q R feature 现在我意识到我应该建立分支feature脱离先前
  • 在测试中覆盖调试模块

    我有一个 Gradle 应用程序 其项目结构类似于杰克 沃顿的 u2020 https github com jakewharton u2020 src androidTest debug main release 在我的应用程序类中 我构
  • Alamofire 使用 PUT 上传图像

    我目前正在尝试使用预先签名的网址将图像上传到亚马逊 它的工作方式是 我发出 GET 请求来获取预签名的 URL 然后发出 PUT 请求以使用 GET 请求返回的 url 上传图像 这两条规则是 Content Type 必须是 image
  • 用于压缩的 WCF 自定义绑定

    遵循样本压缩 http msdn microsoft com en us library ms751458 aspx由微软 我已将编码器 编码器工厂和绑定元素添加到我的解决方案中 与他们的示例的不同之处在于 我们不通过配置文件 要求 注册端