根据 WCF 服务中发布的 xml 内容识别操作,而不在 Url 中包含操作名称

Posted

技术标签:

【中文标题】根据 WCF 服务中发布的 xml 内容识别操作,而不在 Url 中包含操作名称【英文标题】:Identify Operation on the basis of xml content posted in WCF Service without including operation name in Url 【发布时间】:2020-01-05 04:47:39 【问题描述】:

如何识别发布到 WCF 服务 URL 的 xml 内容的操作? 假设 WCF 服务 Url 是 http://single.mat.nn.com 并且客户端不想在 Url 中包含操作名称。 问题是根据发布的xml内容识别操作。

我无法为这个问题找到任何解决方案。是否可以在WCF Service中进行配置,根据发布到WCF Service URL的xml内容来识别操作方法。

【问题讨论】:

【参考方案1】:

Extending Dispatchers 中可能出现的一种情况是:

自定义操作调度。用户可以在动作以外的东西上实现调度——例如,在 body 元素上,或者在自定义消息属性上。这可以使用 IDispatchOperationSelector 接口来完成。

实现IDispatchOperationSelector 将使您能够访问传入消息以解析并决定要将请求转发到哪个方法。

【讨论】:

我想通过 Body Element 实现 Dispatch。从发布的 xml 的根元素中检测操作名称。任何帮助将不胜感激【参考方案2】:

基于HTTP请求中SOAPAction字段请求的对应方法的SOAP web服务。请参阅下面的屏幕截图。 请求体中的 SOAPAction 字段和方法部分可以查看具体请求的操作名称。如果要识别这个值,我们可以通过以下两个接口截取SOAP消息,获取该字段的值。

https://docs.microsoft.com/en-us/dotnet/framework/wcf/extending/how-to-inspect-or-modify-messages-on-the-clienthttps://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.dispatcher.idispatchmessageinspector?view=netframework-4.8 这两个接口可以在通信过程中捕获 SOAP 消息。我们可以检索字段值并对其进行修改。 如果有什么可以帮助的,请随时告诉我。

【讨论】:

在 Url 中不包含名称的情况下调用 OperationContract 方法是否可行。当用户将响应 xml 发布到 Url simpleinterface.at.com/service.svc?wsdl 时。收到 400 错误请求错误。用户不想在 url 中包含操作名称。他想将 xml 发布到单个 url 我对你的问题有点困惑。客户端对服务的调用不包括 URL 中的操作名称,仅包括服务基地址。 10.157.13.69:8864/service1.svc 只有Restful 风格的服务包含操作名和Http-verb。在 SOAP Web 服务中,客户端的调用一般由客户端代理类完成。 ServiceReference1.TestServiceClient 客户端 = new TestServiceClient(); var 结果 = client.Test(); Console.WriteLine(结果);

以上是关于根据 WCF 服务中发布的 xml 内容识别操作,而不在 Url 中包含操作名称的主要内容,如果未能解决你的问题,请参考以下文章

WCF:具有不同内容类型的请求/响应

SILVERLIGHT WCF 问题:内容类型 application/soap+xml; charset=utf-8 被发送到需要 text/xml 的服务;

识别 WCF 客户端 ID

如何从 WCF 服务返回 xml 响应

识别 WCF 服务中的客户端

快速入门系列--WCF--02消息会话与服务寄宿