问题标签 [wcf-extensions]

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.

0 投票
1 回答
507 浏览

wcf - WCF 自定义消息实现

在 WCF 项目的上下文中,我需要以相同的方式处理 xml 和非 xml 消息(例如,标准 SOAP、WS-Attachments 等)。WCF 的正常流程创建一个可以处理 Xml 消息的 Message 对象,这是由编码器完成的,因此如果要处理不同的消息,则需要实现不同类型的消息处理...

我的需要是创建一个消息派生类,它代表“收到消息”的概念,但不是以特殊数据处理的形式“处理”,而是关于真正的数据处理,在第二步中延迟。

所以在包罗万象的服务中我会得到一个Message messageObjectas 参数,所以服务的签名将是Message Accept(Message messageObject)

任何想法?提前致谢

0 投票
1 回答
524 浏览

wcf - 从 WCF 生成的 WSDL 中删除架构元素

我有一个产品数据合同,其中包含几个数据成员,它们是 WCF 服务的一部分。我还使用 DataContractSerializer 将此 Product Datacontract 序列化并存储在我的应用程序中。

现在,我想在生成服务元数据 (WSDL) 时删除产品数据合同的一些数据成员。但是,当我在我的应用程序中序列化对象时,我希望 Product Datacontract 中的所有数据成员都可用。

实际上,我想做的是:抓住 WSDL 生成过程,并从注入到生成的 WSDL 中删除所需的 Datamembers。

谢谢莫弗洛

0 投票
1 回答
1249 浏览

.net - WCF 扩展执行顺序

如果我有几个相同类型的 WCF 扩展模块(如参数检查器),我可以确定它们是按照我在配置文件中定义它们的顺序执行的吗?

我需要更多的保证,而不仅仅是我的观察,但在 MSDN 上找不到任何确认。

0 投票
2 回答
540 浏览

wcf - 如果 IsOneWay = true,则不会调用 WCF 服务代码

我正在通过消息总线扩展 WCF 传输,请求-回复模式对我来说效果很好。当我实现输入输出模式时,我遇到了一个问题。情况是:

1、我创建了InputChannel和OutputChannel,让TransportBindingElement返回。

2、我创建了一个合约接口,里面有两个方法。一个属性是 IsOneWay = true,假设它是 Method1;另一个不是名为 Method2 的。

3、如果我调用Method1,我可以看到它给了我一个RequestChannel和ReplyChannel,而不是InputChannel和OutputChannel。并且回复通道可以接收到 WCF 消息并返回 RequestContext。但是服务代码没有被调用。

4、如果我在Method1上设置IsOneWay = false,效果很好。

4、如果我调用Method2,效果很好。

5,我创建了另一个服务合同,它只有一个 IsOneWay = true 的方法。如果我调用这个方法,WCF 给了我 InputChannel 和 OutputChannel,它运行良好(服务代码执行)。

所以我的问题是: 1,如果我有一个 IsOneWay = true 方法和 IsOneWay = false 方法的服务,WCF 会给我请求-回复通道,对吗?

2,如何处理服务调用,方法是IsOneWay = true,但在同一个服务合同中还有IsOneWay = false方法?

顺便说一句,我注意到对于 IsOneWay = true 方法的请求消息,MessageID 为 NULL。我为请求消息设置了一个新 ID,但没有运气,仍然没有调用服务代码。

0 投票
3 回答
1133 浏览

.net - 用于记录和执行每个方法的操作的 WCF 扩展。IErrorHandler 没有方法的概念?

我有正常的 WCF 服务,但方法很少。

我想在方法开始和结束时记录一些信息并执行一些操作。

通过实施IParameterInspector,我可以轻松地进行大量日志记录。方法BeforeCallAfterCall给我几乎我需要的一切。

但它不适用于异常。有,如果发生异常IErrorHandler,它允许我执行一些处理。缺点是我不知道它是从哪个方法抛出的。都是因为依附于服务行为,而不是操作本身。IErrorHandler

但是,我可以使用以下代码获取方法名称:

这对我来说似乎不是个好主意。

问题:伙计们,我可以使用任何其他 WCF 扩展来实现我的目标吗?你会推荐使用老伙伴 try-catch,也许将它包装成一些很好的语法,这样我就可以在开始和结束时执行操作?语法是什么?您将什么用于类似目的?

提前谢谢。

0 投票
2 回答
14957 浏览

c# - WCF 错误:无法加载扩展

我在我的项目中定义了一个覆盖IDispatchMessageInspector并添加了相关配置的类,但它不起作用

System.Configuration.ConfigurationErrorsException:无法加载为扩展“customHeaders”注册的类型“InMotionGIT_NT.Address.Service、CustomHeaders、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null”。(C:\Users\jmachado\Documents\Visual Studio 2010\Projects\InMotionGIT_NT\Address Service\InMotionGIT_NT.Address.Service\bin\Debug\InMotionGIT_NT.Address.Service.dll.config 第 67 行)

这就是我调用自定义扩展的方式

这就是我定义我的自定义扩展的方式

这是我定义的类,在我的项目中

我错过了配置中的某些内容吗?

0 投票
1 回答
56 浏览

.net - 允许服务访问特定客户端版本

我正在为如下场景寻找一些架构理念:

环境: 我有一个服务(托管在 Windows 服务中的 wcf),它具有多种功能。我提供客户端库(.NET windows dll),它提供 API 来访问此服务,并且还具有其他客户端功能。

问题: 出于业务原因,我需要为服务寻找一种机制,只允许特定版本的客户端访问某些功能(访问某些 API),而不允许访问其他版本的客户端。基本上,我希望教育服务信任来自 1 个特定客户端版本的所有请求,并仅通过任何其他版本的客户端支持基本操作。

请注意:不能添加任何用户许可或用户安全上下文,因为我只想允许或拒绝特定版本的软件客户端的访问,与用户无关。

例如:从版本 X 客户端,我需要允许所有 READ 和 SAVE 功能。但是从任何其他版本中,我只能允许所有 READ 而不允许任何 SAVE。

可能的解决方案: 到目前为止,我已经考虑向客户端添加一个带有版本号的配置,并将其传递给来自客户端的所有服务请求。该服务可以从数据库或 Web 配置中了解要完全信任的版本。在服务中,我可以拦截通道并查看是否有来自客户端消息的特定字符串,因此支持\拒绝访问特定 API。

对这种情况的任何其他优雅的建议,或者如果有人做过任何相关的事情,那也会有所帮助。

谢谢

0 投票
0 回答
103 浏览

c# - 如何在每个级别的 wcf 扩展点上识别相同的请求?

主要目标:我想关联在我的 wcf 扩展点的每个级别计算的信息。

我的方法:为此,我需要在每个扩展点级别识别相同的请求,并合并与相同请求相关的信息。

问题: 有没有办法在不同的扩展点上识别相同的请求?

感谢帮助

0 投票
2 回答
1580 浏览

.net - WCF IParameterInspector + IErrorHandler

如果我同时拥有IParameterInspector并附IErrorHandler加到一个服务,我可以确定IErrorHandler.HandleError()会在被调用的同一个线程上IParameterInspector.BeforeCall()被调用吗?

我需要这个,因为万一发生错误IParameterInspector.AfterCall(),永远不会被调用,并且没有办法(据我所知)我可以获得在BeforeCall(). 所以我希望通过在我的接口实现中有一个字段来克服这个ThreadStatic问题:(

0 投票
1 回答
703 浏览

c# - WCF:“取消”操作调用依赖于请求消息合同

这是我的合同:

OperationRequest1 和 OperationRequest2 都继承自 BaseOperationRequest,后者包含进入服务的所有请求的凭据信息:

OperationResponse1 和 OperationResponse2 都继承自一个基类:

ErrorCode 是一个枚举。

正如您在请求中看到的那样,我有两个消息头和一个内部对象,它不会作为 SOAP 消息的一部分反序列化。这样做的原因是我想在我的服务实现处理它之前将此对象注入到请求中。每个操作实现都将使用这个对象,我不希望每个操作对我的数据层进行两次调用。

我想使用 WCF 可扩展性(通过属性)来执行两项任务:

  1. 验证请求用户。
  2. 使用复杂/复合业务对象在传入请求类上填充“用户”,以在每个操作中使用。

我调查了 IOperationInvoker、IDispatchMessageFormatter 和 IDispatchMessageInspector,但我没有发现它们中的任何一个都足够合适。

仅供参考,这是我的服务的原始示例实现,没有任何花哨的 WCF 可扩展性(或我的存储库/数据层调用):

IOperationInvoker 似乎是最合适的扩展点,但我不太清楚如何“取消”操作并覆盖对客户端的响应。这是我要去的地方: