【问题标题】:Identify Operation on the basis of xml content posted in WCF Service without including operation name in Url根据 WCF 服务中发布的 xml 内容识别操作,而不在 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内容来识别操作方法。

【问题讨论】:

    标签: wcf wcf-data-services wcf-binding


    【解决方案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-client
    https://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(结果);
    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2013-12-04
    • 2017-09-23
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多