【问题标题】:How to change .NET WSDL to make it SAP compatible?如何更改 .NET WSDL 以使其与 SAP 兼容?
【发布时间】:2023-03-19 00:30:01
【问题描述】:

我正在尝试从 SAP 的 .NET 环境中使用 Web 服务。 但是当我尝试在 SAP SOAMANAGER 中创建逻辑端口时,我得到了错误:

SRT-Framework-Ausnahme: Initialer Wert "consumer context table" in Methode IF_SRT_WSP_CONFIG_REGISTRY~CREATE_CONTEXTS_FROM_WS der Klasse CL_SRT_WSP_CONFIG_REGISTRY

WSDL 分析器显示 2 个不受支持的元素

<http:BasicAuthentication xmlns:http="http://schemas.microsoft.com/ws/06/2004/policy/http" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>

<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><wsp:Policy xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xml:base="https://external-server.com/Webservice.svc?singlewsdl"><wsp:ExactlyOne><wsp:All><sp:TransportToken><wsp:Policy xml:base="https://external-server.com/Webservice.svc?singlewsdl"><wsp:ExactlyOne><wsp:All><sp:HttpsToken RequireClientCertificate="false"/></wsp:All></wsp:ExactlyOne></wsp:Policy></sp:TransportToken><sp:AlgorithmSuite><wsp:Policy xml:base="https://external-server.com/Webservice.svc?singlewsdl"><wsp:ExactlyOne><wsp:All><sp:Basic256/></wsp:All></wsp:ExactlyOne></wsp:Policy></sp:AlgorithmSuite><sp:Layout><wsp:Policy xml:base="https://external-server.com/Webservice.svc?singlewsdl"><wsp:ExactlyOne><wsp:All><sp:Strict/></wsp:All></wsp:ExactlyOne></wsp:Policy></sp:Layout></wsp:All></wsp:ExactlyOne></wsp:Policy></sp:TransportBinding>

于是我详细查看了WSDL文件,去掉了wsp:All标签的内容,即:

            <http:BasicAuthentication xmlns:http="http://schemas.microsoft.com/ws/06/2004/policy/http"/>
            <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <wsp:Policy>
                    <sp:TransportToken>
                        <wsp:Policy>
                            <sp:HttpsToken RequireClientCertificate="false"/>
                        </wsp:Policy>
                    </sp:TransportToken>
                    <sp:AlgorithmSuite>
                        <wsp:Policy>
                            <sp:Basic256/>
                        </wsp:Policy>
                    </sp:AlgorithmSuite>
                    <sp:Layout>
                        <wsp:Policy>
                            <sp:Strict/>
                        </wsp:Policy>
                    </sp:Layout>
                </wsp:Policy>
            </sp:TransportBinding>

编辑的离线 WDSL 文件创建逻辑端口现在可以工作了!所以我猜,问题出在BasicAuthentication和TransportBinding标签的设计方式上。

当然原始的外部 WDSL 文件必须进行改编

为了生成与 SAP 兼容的 WSDL 文件,我必须在 .NET 环境中进行哪些更改?我必须调整 web.config 文件吗?

【问题讨论】:

  • 在服务中使用basicHttpBinding即可。目前正在使用wsHttpBinding
  • @JohnSaunders 目前我正在使用 basicHttpsBinding。之所以选择这个,是因为 WebService 应该只能通过 HTTPS 进行通信。我可以使用其他绑定吗,例如无论如何,您建议的 basicHttpBinding 并通过 HTTPS 进行通信?
  • @JohnSaunders 我在我的 Web.config 中将 basicHttpsBinding 替换为 basicHttpBinding。通过 HTTPS 调用 WDSL 文件仍然有效,但另一方面,它并没有解决我的问题。

标签: .net web-services wcf wsdl sap


【解决方案1】:

ABAP Web 服务客户端功能支持的 WSDL 元素存在一些限制。有一些注释记录了支持和不支持的内容:

  • 944029 - ABAP 代理生成支持的 XML 模式
  • 1327511 - ABAP WSDL 处理中的限制和常见问题

在这种情况下,您有两种解决方案:

  1. 如果可能,请让 Web 服务发布者修改其服务以删除任何不受支持的元素。在大多数情况下,这是不可能的。
  2. 修改 WSDL 以删除任何不受支持的元素。不幸的是,这可能非常棘手,并且每次 WSDL 更改时都需要完成(从第一次更改后所做的差异工作可能是可能的,但可能会比它的价值更麻烦)。李>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    相关资源
    最近更新 更多