问题标签 [wcf-routing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 在 Wcf RoutingService 上设置 OperationTimeout
我正在努力在RoutingService上设置 OperationTimeout
问题是消息转发到的服务需要超过 1 分钟才能做出响应。这会导致 RoutingService 上出现 OperationTimeout 异常。
我试图在 RoutingService 的客户端代理上设置 OperationTimeout,但没有成功。
我所做的是添加一个端点行为并在 ApplyClientBehavior 方法中添加一个自定义 IClientMessageInspector。
在自定义 ClientMessageInspector 中,我设置了 OperationTimeout,就像您在此代码片段中看到的那样。
对我来说,此时我似乎为时已晚,因此 RoutingService 生成的代理并不关心这个设置,可能是这样吗?
有什么建议么?
wcf - WCF 4 路由服务协议桥接问题(nettcp 公开服务)
我们遇到了 WCF 路由服务 4.0 问题。我们正在做从 http 到 net.tcp 的协议桥接,我们的 net.tcp WCF 服务托管在 AppFabric 1.1 内的 IIS 7.5 中。此问题发生在 Windows 7 开发盒和 Windows 2008 R2 服务器上。问题是,在 IIS ApplicationPool 回收或 ApplicationPool 停止路由服务上的 System.ObjectDisposedException 之后,在下一次调用路由服务时,它将抛出 System.ServiceModel.ProtocolException:此通道不能再用于发送消息为由于服务器启动的关闭,输出会话自动关闭。通过将 DispatchRuntime.AutomaticInputSessionShutdown 设置为 false 来禁用自动关闭,或者考虑使用远程服务器修改关闭协议。
此时,无法通过路由服务进行所有进一步的调用。奇怪的是,如果通过 net.tcp 公开的 WCF 服务是自托管的,则不会出现此问题。因此,如果您关闭托管 WCF 服务的控制台主机,然后再次打开它,路由服务将再次运行。在通过 net.tcp 绑定公开的 IIS 托管 WCF 服务的情况下,此恢复缺失。
为了重现此问题,我们从http://msdn.microsoft.com/en-us/vs2010trainingcourse_whatsnewinwcf4_topic17.aspx获取了 Ex8-ProtocolBridging 解决方案,并添加了一个 IIS 托管版本的 CalculatorService,称为 CalculatorServiceIis。
我将解决方案文件和 Word 文件“DescribedIssue.docx”下载到https://rapidshare.com/files/3527502127/ProtocolBridgingIssue.zip。您可以在那里找到如何重现该问题的完整描述。
wcf - 带有内容转换的 WCF 路由
我已经实现了 WCF 路由服务;我还希望该服务(或类似的 WCF 服务)以规定的和统一的(与内容无关的)方式转换有效负载。例如,有效载荷将始终采用这种形式,我想像在所有情况下Foo<T>
一样传递它。Bar<T>
我很高兴转换为 XSLT 或程序化。我不在乎收到的不是 type 的消息会发生什么Foo<T>
。
我希望使用 WCF,因为它提供了很多 OOTB 功能(例如,它支持大量绑定)。使用大量样板方法来实现 WCF 服务来转换每个封闭的泛型 ( Foo<Class1>
-> Bar<Class1>
; Foo<Class2>
-> Bar<Class2>
; 等) 是不切实际的,因为这将需要在每次路由新消息类型时重新编译/重新部署。
据我所知,WCF 不处理开放泛型,并且 WCF 路由不促进内容转换 OOTB。也就是说,System.ServiceModel.Routing.RoutingService
显然会以某种非特定形式拦截 WCF 调用,所以我希望利用相同的模式来实现我的目标。谁能提供有关如何执行此操作的指导(或说明为什么不可能)?
c# - 结合 WCF 路由和发现
我正在尝试将 WCF 路由服务与发现相结合,但似乎它们不能一起工作。这是我的场景:
来自客户端的请求进入路由服务。我希望路由服务使用发现来找到正确的端点并将传入消息发送到找到的端点。然而,路由服务向发现服务发送了一个 [ http://tempuri.org]命名空间,因此发现服务无法通过该命名空间找到服务,因为它需要路由器服务上传入消息的命名空间。
我知道我正确配置了发现服务,因为如果我在客户端使用发现配置,它可以解析端点。但是,在我的生产场景中,无法在客户端进行发现。如果我不使用发现来解析端点,路由器服务也可以工作。
这是我的路由和发现配置:
这是一张提琴手图片,显示了正在发送到发现服务的内容。(注意 [ http://tempuri] 命名空间):
如果我的情况可行,有人可以建议我吗?
wcf - 使用路由服务对 WCF 服务进行版本控制
我的任务是为一套新的 WCF 服务制定版本控制策略。我所做的大部分阅读都建议使用中间路由服务将呼叫转发到适当的服务版本。我理解这是如何工作的,但我质疑这在保护客户免受重大变化方面有多大好处。
例如,我有两个具有不同端点的服务版本:
路由服务解决方案将在 SOAP 消息中查找自定义“版本”标头,并将调用路由到适当的服务。如果没有找到版本标头,则可以使用最新版本。
或者,我可以只公开两个端点,消费者可以调用所需的版本。
一种解决方案如何优于另一种解决方案?添加路由服务似乎增加了额外的配置级别。这两种解决方案都要求消费者在想要升级时更改他们的代码......
在单独的帖子中提出这个问题可能会更好,但维护服务的多个版本意味着我们将需要在源代码中并发版本的合约。有没有推荐的管理方式(例如命名空间)?
谢谢
c# - 使用 RoutingService 在客户端和 WCF 服务之间进行安全和松散耦合的通信
是否可以通过 RoutingService 将对象发送到对等 WCF 服务,而无需让路由器知道这些对象的确切类型?
我的意图是一次性创建一个路由器,然后能够添加新的 WCF 服务,将它们动态添加到路由表中,并允许客户端与这些服务进行通信而无需停止,更改路由器的代码,然后启动再说一遍。
我正在考虑这样的通用合同:
我可以把它放在一个公共库中,所有 3 个组件都链接到(客户端、路由器、服务)。但是,我不确定是否可以派生新的子类以允许添加具有新数据交换的新客户端/服务,而无需更改路由器。
有什么建议吗?当通过客户端强制执行加密直到服务时,解决方案是否可以工作?
提前致谢。
wcf - 使用 XPath 的 WCF 路由:无效的限定名异常
我正在尝试在 wcf 中使用 XPath 来实现基于内容的路由。
我创建了包含服务合同和数据合同的类库,如下所示。
我创建了一项服务,如下所示:
我正在尝试基于“价值”实现路由
在 app.config(在路由器项目内部)中,我为命名空间和 XPath 过滤器添加了以下行
但是,每当我运行代码时,我都会收到“ cc://value1 > 500 ”的异常作为无效的限定名异常。
我该如何解决这个问题?
ajax - 无法通过 AJAX 连接到 WCF RoutingService:“找不到端点。”
我已经设置了 WCF RoutingService 的一个实例,以及一个要路由到的具体服务。我可以从测试控制台应用程序很好地连接到它,但我得到一个“找不到端点”。当我尝试通过 AJAX 连接时出错。
具体服务的实现如下所示:
它的 App.config 文件包含以下内容:
路由服务的 Web.config 是这样的:
当我像这样使用 SOAP 端点调用服务时,它工作正常:
但是,当我尝试使用此脚本通过 AJAX 调用它(与路由服务在同一 IIS 站点上运行)时,它会失败:
我得到的响应是这样的(用 HTML 包装):
最奇怪的是,当我转到那个 URL 时,它建议我使用 Uri“ProcessRequest”来访问“Service at http://localhost:5725/RouterService.svc/webhello/ProcessRequest
”。
谁能看到我在这里做错了什么?
wcf - 使用带有内置 WCF 路由器服务的 URL 路由接收错误
我想通过具有客户用户/密码安全策略的 WCF 路由器服务创建一个无扩展(如果可能,无文件)路由器端点。尝试通过它路由 SOAP 消息时,我收到以下错误异常:
由于 URL 路由,我确实必须为服务主机启用 AspNetCompability。
以下是我遵循的步骤:
我已经在 RouteTable 中设置了一个带有适当 URL 路由规则的基本 .net 4.0 Web 应用程序:
我的 CustomServiceHostFactory 代码:
在 web.config 文件中,我定义了服务端点和行为:
绑定和行为配置很简单,只需一个简单的用户名/密码验证要求:
c# - WCF RoutingService 如何将来自具有相同合同的两个不同 WCF 服务器的回调消息路由到客户端?
我的 WCF 服务器是这样工作的:您通过调用服务方法来订阅它们,比如 Subscribe()。他们通过回调通道将结果发回给您,例如 MessageReceived(string message)。
我现在的问题是我只从一个服务端点获取回调消息,而不是两者。事实上,仅通过调试,我就看到我的第二个服务甚至没有收到请求。有谁知道问题是什么?这是我的代码(请注意,我在 serviceAddresses 字符串中有两个 net.tcp 地址):
所以再一次......这就是我想要的:
这就是我得到的(即使我向路由器添加了第二个服务,它似乎甚至没有调用它的服务方法):