使用 Protobuf-net 的端点行为配置 WCF

2024-03-08

我有一个 WCF 服务 (.NET 4),它公开 4 个端点,其中一个端点配置有 protobuf-net (V1.0.0.280) 行为扩展。然而,我注意到 protobuf-net 行为会启动ALL定义的端点,包括未配置 protbuf-net 的端点!我已将我的配置粘贴在下面。我错过了什么吗?非常感谢任何帮助..thx

    <service name="MyService" behaviorConfiguration="MyServiceBehavior">
    <endpoint address="Http.Basic" binding="basicHttpBinding" bindingConfiguration="Http.Basic.Config" contract="IMyService" behaviorConfiguration="DefaultBehavior" />
    <endpoint address="Http.Binary" binding="customBinding" bindingConfiguration="Http.Binary.Config" contract="IMyService" behaviorConfiguration="DefaultBehavior" />
    <endpoint address="Tcp.Binary" binding="customBinding" bindingConfiguration="Tcp.Binary.Config" contract="IMyService" behaviorConfiguration="DefaultBehavior" />
    <endpoint address="Http.ProtoBuf" binding="basicHttpBinding" bindingConfiguration="Http.Basic.Config" contract="IMyService" behaviorConfiguration="ProtoBufBehavior" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8085/MyService"/>
        <add baseAddress="net.tcp://localhost:8086/MyService"/>
      </baseAddresses>
    </host>
  </service>

  <behaviors>
    <serviceBehaviors>
      <behavior name="MyServiceBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
      <behavior name="DefaultBehavior">
        <dataContractSerializer maxItemsInObjectGraph="2147483647" />
      </behavior>
      <behavior name="ProtoBufBehavior">
        <ProtoBufSerialization />
      </behavior>
    </endpointBehaviors>
  </behaviors>

  <bindings>
    <basicHttpBinding>
      <binding name="Http.Basic.Config" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
      </binding>
    </basicHttpBinding>
    <customBinding>
      <binding name="Http.Binary.Config" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00">
        <binaryMessageEncoding />
        <httpTransport allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" />
      </binding>
      <binding name="Tcp.Binary.Config" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00">
        <binaryMessageEncoding />
        <tcpTransport hostNameComparisonMode="StrongWildcard" />
      </binding>
    </customBinding>
  </bindings>

这很奇怪,但是(检查代码)我只应用更改withinWCF 提供给我的端点:

    void IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
    {
        ReplaceDataContractSerializerOperationBehavior(endpoint);
    }

    void IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
    {
        ReplaceDataContractSerializerOperationBehavior(endpoint);
    }

    private static void ReplaceDataContractSerializerOperationBehavior(ServiceEndpoint serviceEndpoint)
    {
        foreach (OperationDescription operationDescription in serviceEndpoint.Contract.Operations)
        {
            ReplaceDataContractSerializerOperationBehavior(operationDescription);
        }
    }


    private static void ReplaceDataContractSerializerOperationBehavior(OperationDescription description)
    {
        DataContractSerializerOperationBehavior dcsOperationBehavior = description.Behaviors.Find<DataContractSerializerOperationBehavior>();
        if (dcsOperationBehavior != null)
        {
            description.Behaviors.Remove(dcsOperationBehavior);
            description.Behaviors.Add(new ProtoOperationBehavior(description));
        }
    }

即“给定一个端点(通过 WCF),循环遍历每个端点手术(方法)在该端点,并将串行器从 DCS 更改为 PB”

这提出了一种有趣的可能性,即合约定义(以及操作定义)本身在所有端点之间共享 - 但老实说我对此并不确定。如果说is在这种情况下,我认为每个端点不可能有不同的处理器。然而,我不是 WCF 大师。这真是……令人费解。

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

使用 Protobuf-net 的端点行为配置 WCF 的相关文章

  • 使用 WCF 和 .NET 4.0 在 C# 中实现 SOAP 客户端

    我在 NET 4 0 中开始使用 WCF 时遇到问题 这是我的情况 我用 PHP 创建了一个小型 SOAP 服务器 我有一个 C 项目 我想在其中连接到此服务器并启动 SOAP 通信 我的问题是 我不知道如何在 C 中执行此操作 我找不到
  • WCF、REST、SSL、客户端、自定义证书验证

    我有一个无法解决的具体问题 让我详细解释一下 我是这项技术的新手 所以我可能使用了一些错误的术语 如有不明白之处 请指正并解释或要求解释 我正在创建一个自托管的 WCF REST 服务器 托管在 WPF 应用程序中 它使用 https SL
  • 异步调用的任务限制?

    我有一个同步工作的 NET 4 5 WCF 客户端 我正在更新它以使用新的异步 等待功能来进行多个同时服务器调用以同时获取数据块 在结束之前 我担心同时运行的所有线程将使服务器饱和 更不用说明年升级到该角色时会终止我的 Azure 辅助角色
  • 如何生成wcf服务库项目的wsdl文件?

    我的解决方案中有一些 Wcf 服务库项目 不是 Wcf 服务应用程序 我必须将项目的 wsdl 文件提供给将使用这些服务的同事 我怎样才能做到这一点 提前致谢 您可以使用WCF服务主机 http msdn microsoft com en
  • 远程服务器返回错误:NotFound。银光+WCF

    我正在尝试调用网络服务几个小时 我添加了 clientaccesspolicy xml
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 实体框架POCO与WCF软件设计问题

    我将在我的应用程序中使用实体框架和 WCF 正如我所看到的 建议的做法是将 POCO 与实体框架结合使用 并使用 POCO 类作为 DataContracts 如果我没记错的话 这实际上就是 POCO 和属性的用途 但是 我被要求对 Ent
  • WCF 错误:相对端点地址

    嗯 对 WCF 还很陌生 我想我有点搞砸了 这就是我到目前为止所做的 我在 IIS 中托管了我的 WCF 服务 首先是合同 using System using System Collections Generic using System
  • WCF 中的 Web 服务发现:Ws-Discovery 还是 UDDI?

    我知道 UDDI 和 Ws Discovery 熟知搜索服务与广播的位置 之间的区别 但我的问题是 在 WCF 中发现 Web 服务的最简单方法是什么 最简单的意思是 WCF 中已经实现了哪些内容并且现在可以使用 我还没有在 WCF 中看到
  • 如何处理 WCF 中不正确的 SOAP 错误?

    我必须使用 SOAP 来使用第三方 Web 服务 让它与 WCF 一起工作很容易 但现在我遇到了 SOAP 错误的问题 该服务向我发送了不正确的 SOAP 错误
  • WCF 中的动态 ExpandoObject

    尝试使用枚举类型进程和动态数据的操作来 Ping Pong 我的服务 ServiceContract CallbackContract typeof iStackoverflowCallBack public interface iStac
  • App.config 之外的 WCF ChannelFactory 配置?

    我有一个使用插件系统的 Windows 服务 我在插件基类中使用以下代码为每个 DLL 提供单独的配置 因此它将从plugin dll config string dllPath Assembly GetCallingAssembly Lo
  • RESTful WCF 的最低配置

    为了让 WCF 与 REST 一起工作 我至少需要在 web config 中放入什么 我已经用 WebGet 注释了我的方法 但他们没有收到消息 我发现您可以将以下内容添加到 svc 文件中的 ServiceHost 指令中 它会自动为您
  • 如何唯一标识会话 0 中运行的 Internet Explorer 窗口?

    我正在创造WCF web services自动化internet explorer 有多个Web服务调用需要访问同一个实例Internet Explorer 然而 自从WCF服务托管于IIS所有对 Web 服务的调用都在会话 0 中执行 现
  • 如何为WCF服务添加跨域支持

    我试图允许从托管在 localhost 80 的 javascript 应用程序向托管在不同端口的 WCF RStful 服务发出 POST 请求 但不知何故它不起作用 我尝试将自定义属性添加到标头 以及以编程方式将其添加到我的服务中JSO
  • 工作组模式下 WCF MSMQ 的配置

    在尝试部署服务时 我发现它无法启动 因为 MSMQ 处于工作组模式 我创建了一个专用队列 并更改了配置文件以引用它 但 WCF 服务主机拒绝以以下消息启动 绑定验证失败 因为绑定的 MsmqAuthenticationMode 属性设置为
  • 使用 WCF 的契约优先 SOA

    这个问题更多的是探索人们在社区中 在实际情况中所做的事情 而不是一个有针对性的问题 我对此进行了相当广泛的搜索 虽然我发现很多博主都提倡契约优先的服务设计 并且有一些评论支持它们 但我还没有找到很多关于使用 WCF 实现契约优先的实用信息
  • WCF 和 n 层架构以及序列化性能

    当使用 WCF 服务作为接口层使用 5 层架构 前端 gt 接口层 gt 业务层 gt 数据库层 gt 数据库 时 让客户端应用程序调用它的方法 我是否也应该使用 WCF 服务业务层和数据库层 我问是因为 3 个服务之间进行的所有序列化 反
  • WCF 的“using”语句中出现异常,未正确关闭连接。如何关闭有故障的 WCF 客户端连接或出现异常的连接?

    StackOverflow 上有几个有关关闭 WCF 连接的问题 但排名最高的答案是指此博客 http marcgravell blogspot com 2008 11 dontdontuse using html http marcgra
  • 错误:在 Visual Studio 2013 中找不到类型或命名空间名称“ApplicationUser”

    我正在学习 RESTful WCF 服务 教程 但是当我构建我的应用程序时 我收到此错误 找不到类型或命名空间名称 ApplicationUser 您是否缺少 using 指令或程序集引用 c users basma documents v

随机推荐