当前位置: 首页 > news >正文

SAP配置发布WebService接口并调用(超级详细)

文章目录

  • 前言
  • 一、案例介绍/笔者需求
  • 二、WebService是什么?
    •             `a.`传输协议
    •             `b.`数据协议
    •             `c.`WSDL
    •             `d.`UDDI
  • 三、WebService 和 WebApi 的区别以及优缺点
    •             `a.`主要区别
    •             `b.`优缺点
  • 四、SAP如何发布一个webservice接口
    •             `a.`服务的激活
    •             `b.`函数的创建
    •             `c.`根据向导创建服务
    •             `d.`激活查看服务
    •             `e.`SOAMANAGER 配置Web服务 生成WSDL地址
    •             `f.`查看SOAMANAGER生成WSDL地址
  • 五、WSDL接口文档详解
    •             `a.`WSDL 文件结构
    •             `b.`Documentation
    •             `c.`Policy
    •             `d.`Types
    •             `e.`Messages
    •             `f.`Port Types
    •             `g.`Bindings
    •             `h.`Services
  • 六、Postman调用webservice接口
    •             `a.`请求URL
    •             `b.`请求方式
    •             `c.`请求头
    •             `d.`请求体
    •             `e.`调用查看返回结果
    •             `f.`权限配置
  • 七、其他编程语言调用
    •             `a.`Python调用
  • 八、总结


前言

      本文2w字+,先 点赞 关注 收藏 制作不易 谢谢🤞

      这篇文章给大家介绍一下SAP如何配置发布Webservice接口,也就是作为服务的提供者,发布之后并采用PostmanPython进行调用。这篇文件主要还是以SAP如何配置出Webservice为主来展开介绍,网上虽然也有类似的文章但是配图很模糊并且不完善知识也不连贯所以决定自己出一篇,虽然在现代以及往后的软件开发中,更偏向于使用WebAPI,但是webservice也有着不可替代的优势和应用场景。


一、案例介绍/笔者需求

        这篇文章我们会在SAP中创建一个简单的函数,以这个函数创建企业服务为案例,也就是等同于把这个函数封装成 Webservice对象了,在这过程中我会首先介绍Webservice是什么?有什么优缺点?和 Webapi的主要区别是什么?后面也会介绍它生成的WSDL文件的详解。


二、WebService是什么?

          Webservice 说简单点它就是一个接口,我们只要遵循它的数据格式和调用方式这个接口就能给我们返回相应的数据,然后我们再来看一下比较官方的描述:WebService是一种通过网络进行分布式计算和应用集成的技术。它允许不同的应用程序通过互联网进行互操作和通信,即使它们运行在不同的平台或编程语言上。WebService基于一系列标准协议,如SOAP(Simple Object Access Protocol)、WSDL(Web Services Description Language)和UDDI(Universal Description, Discovery, and Integration)。

            a.传输协议

                      Webservice 的传输协议通常使用HTTPHTTPS作为传输协议,但也可以使用其他协议如SMTP(Simple Mail Transfer Protocol)和 JMS(Java Message Service)。
                      一般都是http、https,它两就是超文本传输协议只不过带s的是更安全,它们是Web通信的基础,定义了请求和响应的格式和规则,使得Web浏览器和服务器能够交换各类格式的信息。

            b.数据协议

                      Webservice 的数据协议是SOAP(Simple Object Access Protocol)是一种基于XML的消息协议,用于在Webservice之间交换信息。它定义了消息的格式和处理规则,支持复杂的数据类型和操作。这也就注定了Webservice必须使用XML格式的数据进行通信。

            c.WSDL

                      WSDL 可以理解为它是用XML编写的接口文档 ,注意是文档,用于描述Webservice的功能、操作、端点和访问方式。WSDL文件提供了服务的契约,详细描述了服务的接口和数据格式类型等等。

            d.UDDI

                      UDDI一个基于XML的标准,用于注册和发现Webservice。我自己的理解就是所有人配置发布的Webservice都会被记录在一个公共的注册表然后有人调用对应Webservice的时候就会去这个注册表中查找到对应的服务,找到了就可以调用没找到就调用失败。让我们在来看一下比较官方的解释:UDDI(Universal Description, Discovery, and Integration) 是一种基于XML的标准,用于注册和发现WebService。它类似于一个目录服务,帮助企业发布、查找和集成WebService。UDDI允许企业和应用程序通过互联网发布和查找WebService,从而实现更高效的业务集成和互操作性。
                      消费者可以根据服务的名称、分类、发布者等进行搜索。一旦找到匹配的服务,消费者可以获取服务的WSDL文档,从而了解如何访问和使用该服务。但是开发者一般直接使用WSDL文件解读和调用WebService,而不需要通过UDDI查找服务。WSDL提供了详细的接口描述,足以支持服务的发现和调用。所以这个UDDI了解一下就行了。

三、WebService 和 WebApi 的区别以及优缺点

            a.主要区别

                       1.传输协议
                            Webapi只能使用httpWebservice有多种可选但是一般也是http

                       2.数据协议
                            Webservice只能使用XML的数据格式而WebapiJSON或者XML都可以。
                            Webapi使用JSON格式,消息体小,传输效率高。
                       4.应用场景
                            Webservice适合端到端的场景提供服务,例如CS架构的客户端到服务器这种场景 或者是为了遗留系统需要与已有的SOAP服务进行集成。
                            Webapi更适合BS架构的应用场景就是浏览器到服务器这种,由于Webapi采用REST架构风格所以能被广泛支持几乎所有的现代编程语言和框架都原生支持RESTful API

            b.优缺点

                       1.性能复杂度
                            这方面可以说Webapi完胜,由于Webservice有SOAP协议的存在需要处理SOAP消息,SOAP消息较复杂处理起来较为繁琐。而且使用XML,消息体较大,传输效率较低。

                       2.安全性
                            默认情况下Webapi是没有SOAP那样的内置安全机制,需要额外实现。

                       3.文档契约
                            Webapi如果接口有变化的话需要手动的更新文档容易出错,但是Webservice如果接口有变化那么只需要重新获取一下WSDL即可,所以学会看WSDL还是很重要的。

四、SAP如何发布一个webservice接口

          SAP要配置发布Webservice接口主要有两个步骤,在GUI端根据向导创建生成一个企业服务,然后再使用事务码SOAMANAGER进入到浏览器SOAP的配置界面进行服务的创建配置,最终会生成获取WSDL文件的地址,有了这个WSDL之后我们就可以根据WSDL里面详细的接口描述来调用接口了。其实这些步骤就是将SAP已有功能封装成Webservice对象了,供其他系统调用,从而实现SAP与非SAP系统(如OA、PLM等)系统的集成。

            a.服务的激活

                      如果你们系统 域名访问、WDA程序相关的服务、SOAMANAGER相关的服务 都已激活能正常使用 可以跳过此步骤。 可以直接运行SOAMANAGER事务码看是否能正常进入配置界面如下图,如果可以就直接跳过此步骤。
在这里插入图片描述

                       1.域名解析
                            这个一般不会有问题的,你可以先忽略此步骤如果不行再回头来看,如果你们SAP是在内网本地进行部署的,现在你要是通过执行某些事务码例如webgui、soamanager、sap自己带出来的域名不能访问的话,那么你测试练习的时候可以先进行单机域名解析,注意是不能访问,不是访问报错,不能访问和访问报错是两码事。不能访问到就如同下图一样,这个url是我乱输入的。
在这里插入图片描述
                            1、 单机域名解析
                                   我们能通过域名访问到指定的网站是因为DNS服务器或者是自己电脑把域名解析为了IP地址,我们要进行单机域名解析也就是让自己电脑解析此域名。下图是我们公司的一个填报考勤的网站,可以看到公司是没有购买域名的就是直接用ip访问的,那么如果我想用域名访问这个网站可以做如下操作。
在这里插入图片描述

                                   路径为:C:\Windows\System32\drivers\etc
在这里插入图片描述
                                   如下图所示可以看到能通过这个域名访问到了,这个就是单机域名解析的原理。如果你发现你把记事本中的解析删掉了,但是还能通过此域名访问,那是因为缓存的原因你需要清理一下浏览器缓存,如果是Edge浏览器你可以按 Ctrl +Shift + Del 只勾选 缓存的图像和文件立即清除 即可。在这里插入图片描述
                                   如果你想要获取你们SAP系统的域名可以输入 webgui 这个事务码或者 soamanager 事务码 sap 都会打开浏览器把域名自己带出来。如下图所示就是webgui带出来的域名,图中关于服务的激活后面会有详细操作。
在这里插入图片描述

                            2、 集中域名解析
                                   看完了单机域名解析其实这个集中域名解析也就好理解了。就是需要公司网管把解析条目添加到服务器所在网络的DNS服务中。这样处于这个网络的设备就都能通过域名访问了。

                       2.WDA服务
                            由于SOAMANAGER这个程序其实就是基于Netweaver的Web Dynpro程序,所以要使用SOAMANAGER就得激活WDA服务相关服务,SAP Netweaver组件安装后,默认是不激活 WDA 和 SOAMANAGER 相关服务的,是出于安全的考虑,我们需要通过事务码 SICF 逐个激活相关服务。

                          1、 进入定义服务界面 事务码:SICF 层次结构:SERVICE
在这里插入图片描述

                          2、 搜索服务名称:WEBDYNPRO 完整路径:/default_host/sap/bc/webdynpro
在这里插入图片描述

                          3、 搜索服务名称:MYSSOCNTL 完整路径:/default_host/sap/public/myssocntl
                                 这个好像不激活也可以的 没激活就是暗的。
在这里插入图片描述

                          4、 搜索服务名称:WEBDYNPRO 完整路径:/default_host/sap/public/bc/webdynpro
在这里插入图片描述

                          5、 以下同上面一样先搜索再根据完整路径找到对应服务激活即可。

搜索完整路径
ur/default_host/sap/public/bc/ur
icons/default_host/sap/public/bc/icons
icons_rtl/default_host/sap/public/bc/icons_rtl
webicons/default_host/sap/public/bc/webicons
pictograms/default_host/sap/public/bc/pictograms

                       3.SOAMANAGER服务
                            SOAMANAGER 相关服务激活也同上面一样,需要注意的是在搜索的时候可能出现太多的节点不好找那么就根据完整路径自己手动找吧。

搜索完整路径
soap/default_host/sap/bc/soap
srt/default_host/sap/bc/srt
sap/default_host/sap/bc/srt/rfc/sap
sap/default_host/sap/bc/webdynpro/sap
appl_soap_management/default_host/sap/bc/webdynpro/sap/appl_soap_management

                       4.测试运行SOAMANAGER
                            完成以上操作之后可以尝试运行SOAMANAGER事务码,如果能顺利进入浏览器并且出现登录界面那么就证明服务都正常运行了。

                            如果出现如下界面点继续访问就行了。
在这里插入图片描述

                            如果页面返回的是403可能是某些服务没激活,一般访问的URL地址也就是服务激活对应的地址呢。下图的操作是通过URL获取WSDL文件的地址。可以看到没激活WSDL11服务就无法正常使用这个功能。
在这里插入图片描述

                            下图是输入事务码SOAMANAGER进入web配置界面,如果出现这些问题就要根据URL审查是不是哪些服务没有激活。有时候也不一定就是URL结尾的服务没激活。下图就是 /default_host/sap/bc/webdynpro 未激活而并非 appl_soap_management 未激活,所以出现问题还是要仔细审查一下这些服务的。
在这里插入图片描述

            b.函数的创建

                      我们就创建一个比较简单的函数,入参两个分别为 FIRSTNAMELASTNAME 出参的话就一个把两入参拼接就是出参 FULLNAME
                       1.创建函数组
                            根据编号123456 操作即可。
在这里插入图片描述

                       2.创建函数模块
                            使用SE37或者直接在SE80下面的函数组创建即可,下图是SE80创建步骤,SE37创建的时候需要手动输入函数组名称。
在这里插入图片描述

                       3.函数配置
                            1、 设置为远程调用
在这里插入图片描述

                            2、 入参 出参
在这里插入图片描述

                            3、 代码逻辑
在这里插入图片描述

            c.根据向导创建服务

                      调出向导创建页面的方式有多种,可以从SE80包的层面创建,也可以从SE80函数模块层面创建,还可以从SE37进入对应函数创建。其中在SE80包层面创建的话可配置项是最多的。下面我将进行SE80包层面如何创建的详细步骤。
在这里插入图片描述

                       1.向导第一步
                            这一步是 选择要创建的代理的对象类型。 为什么叫代理对象呢?其实相对于我们这个RFC函数而言创建的Webservice就是代理服务,因为外部系统的请求进来之后首先是到了Webservice,然后Webservice再来调用我们的RFC。所以Webservice相当于我们RFC与外部系统之间的代理。其实SAP也提供了各类语言之间调用RFC的办法,但是相对于Webservice或者是走PI、PO、CPI 这些中间件通用性可配置性还是比较低的。这一步我们选择 服务提供者(Service Provider) 如下图所示。
在这里插入图片描述

                            这个步骤的这些选项允许我们在SAP系统中创建和管理不同类型的服务和相关对象,从而实现复杂的企业服务架构。根据我们的需求,选择相应的选项可以帮助我们更有效地定义和管理服务。如下表格是其他选项的简介。

选项描述用途
Data Type定义数据的结构,包括字段、数据类型和长度。用于描述消息或操作中的数据结构。
Message Type定义消息的结构。用于描述在系统之间交换的数据格式。
Datatype Enhancement扩展现有数据类型。允许增加额外的字段或属性到现有数据类型。
Fault Message定义如何使用外部Web服务。用于在SAP系统中调用外部Web服务。
Service Consumer定义消息的结构。用于描述在系统之间交换的数据格式。
RFC Consumer用于远程功能调用(RFC)的消费者定义。允许SAP系统调用外部RFC服务。
Service Provider定义一个服务提供者。用于将SAP系统中的功能发布为Web服务,供其他系统调用。
Event Provider定义事件提供者。用于发布和处理事件,以便在系统之间进行异步通信。
Service Variant服务的不同版本或变体。允许管理同一服务的多个版本。
Consumer Mapping定义服务消费者的映射。用于将服务消费者映射到实际的服务实现。
Operation Mapping定义操作之间的映射。用于将请求和响应消息映射到相应的操作。
Processing Type Domain处理类型的领域。定义处理类型的分类。
Integration Scenario Definition定义集成场景。用于描述如何在不同系统之间集成服务。
Semantic Contract定义语义合同。用于描述服务之间的语义约定。
Contract定义合同。用于描述服务提供者和消费者之间的合同。
Contract Implementation合同的实现。定义如何实现合同中描述的服务。
Consumer Factory定义消费者工厂。用于生成服务消费者实例。
Service Group定义服务组。用于将相关的服务组织在一起进行管理。

                       2.向导第二步
                            我们选择如下图所示的选项。这个选项代表什么请看后面的表格。
在这里插入图片描述

选项描述用途
Backend定义数据的结构,包括字段、数据类型和长度。用于将SAP系统中的后端功能模块或BAPI暴露为Web服务。(具体我也不清楚)
Enterprise Service Repository定义消息的结构。用于通过企业服务库中的预定义服务来生成Web服务。
Existing ABAP Object (Inside Out)指现有的ABAP对象。可以将函数组、函数模块、BAPI 暴露为Web服务。也可以说是封装成为web service对象了
External WSDL/Schema指外部的WSDL或XML Schema定义。选择这个最终生成的webservice是会去调用外部的一个webservice等于是sap生成的webservice做了代理。

                       3.向导第三步
                            这一步是给我们创建的服务起一个名称再输入描述,这个名称会在后续的SOAMANAGER事务码中的配置web服务中用到。这个名称和函数名没啥关系哦,就是一个服务名称是另外的含义,后续管理查找配置服务会用到的。
在这里插入图片描述

                       4.向导第四步
                            根据需求我们选择 函数模块
在这里插入图片描述

                       5.向导第五步
                            选择要调用的函数,还有一个Map Name选项 一般用不上,Map Name的作用是在某些情况下,外部系统可能有特定的命名规范要求,你可以使用映射名称来符合这些要求,而不改变函数模块的实际名称,也有可能是为了起一个使外部调用者更容易理解服务名称,可以使用更具描述性的映射名称。
在这里插入图片描述

                       6.向导第六步
                            这一步是选择不同的安全配置文件(Profile)。每个Profile选项代表一种安全认证和传输保障的组合。由于我们是练习测试就选择无认证方式无传输保障的选项四了,其他选项的详情请看后面的表格。这个好像在SOAMANAGER还可以再次配置。
在这里插入图片描述

选项认证方式传输保障描述
Authentication with Certificates and Transport Guarantee使用证书进行认证。提供传输保障(例如通过SSL/TLS)。这种配置提供了高安全性,通过证书进行身份验证,并且确保数据在传输过程中是安全的。
Authentication with User and Password, No Transport Guarantee使用用户名和密码进行认证。不提供传输保障。这种配置提供了基本的身份验证,但数据在传输过程中没有加密或其他保障措施。
Authentication with User and Password and Transport Guarantee使用用户名和密码进行认证。提供传输保障(例如通过SSL/TLS)。这种配置结合了用户/密码认证和传输保障,提供了中等水平的安全性。
No Authentication and No Transport Guarantee不进行任何身份验证。不提供传输保障。这种配置没有任何安全措施,适用于不需要安全保障的非敏感数据。

                       7.向导第七步
                            这一步根据公司规定将这个服务存放到指定包和关联请求号,由于我是测试练习就放到本地包了。
在这里插入图片描述
                       8.向导第八步
                            最后一步点击完成 ,我们也可以看到这一步有提示说这个服务现在还没法使用,还需要在SOAMANAGER中配置。
在这里插入图片描述

            d.激活查看服务

                       1.激活服务
                            根据向导创建完之后需要我们激活服务,不然在SOAMANAGER里面是搜不到这个服务的。
在这里插入图片描述

                       2.测试运行服务
                            虽然我们这个服务还没在 SOAMANAGER 配置,外部系统还不能发现和调用,但我们可以在SAP本地测试的。
在这里插入图片描述

                       3.WSDL分页签查看
                            现在只要能访问SAP的网络的设备都可以通过如下图这个URL获取到这个WSDL文件,访问的时候如果要输入用户名和密码就输SAP登录的用户名密码就行。但是这个WSDL现在还不足以让外部系统来解读调用,你可以叫这个为 初始生成的WSDL 这个WSDL通常包含服务的基本结构和接口定义。它定义了服务的操作、消息类型、数据类型等内容。可以用于初步的服务调用和测试。也可以用下面这个链接获取,这个好像是用 WSDL11服务 专门获取WSDL的 URL。
                            http://<域名>:<端口号>/sap/bc/soap/wsdl11?services=< RFC >&sap-client=<客户端>
                            当你在SOAMANAGER中配置并激活Web服务后,系统会生成一个新的WSDL的 URL,这个WSDL除了包含初始WSDL的所有内容外,还会包含更多的配置信息,如实际的端点地址、安全设置、传输协议等。它是一个更完整、更详细的WSDL,反映了服务在实际运行环境中的配置。用于实际的服务调用和集成。它提供了客户端与服务端通信所需的所有详细信息,并确保服务按照在SOAMANAGER中配置的安全和传输设置运行。
在这里插入图片描述
                       4.其他分页签
                            其他分页签你们自己随便看看就行了感觉也没啥重要信息了。

            e.SOAMANAGER 配置Web服务 生成WSDL地址

                      这一步我们会在SOAMANAGER中配置并激活Web服务,系统会生成一个新的WSDL获取的URL,通过对这个WSDL的解读我们就可以准确调用这个接口了。
                       1.进入SOA管理界面
                            直接输入 SOAMANAGER 回车就行。进去之后点击 web服务配置
在这里插入图片描述
在这里插入图片描述

                       2.查找要配置的服务
                            进入之后如下图搜索我们要创建配置的服务。如果 SAP没有激活此服务或者在激活之前就打开了此页面是搜不到的。需要激活之后关闭此页面重新进入。
在这里插入图片描述
在这里插入图片描述

                       3.服务和绑定名称
                            这个新绑定名称是对服务的具体实现进行精细的配置和管理。我们每一个服务都可以配置出来多个接口的,比如Z_GLYN_JOIN_NAME这个服务可以配置两个接口,一个绑定的名称叫Z_GLYN_JOIN_NAME_HTTP再创建另外一个接口叫Z_GLYN_JOIN_NAME_HTTPS,代表这个服务有两个接口可以调用,只不过走的协议不一样,一个是HTTP另外一个是HTTPS,但是我们不仅仅可以配置协议 还有更多的信息可以配置。
在这里插入图片描述

                       3.安全配置
                            这一步是关于安全的配置。我先选无验证 后续再改验证方式看调用方式会有何变化。
在这里插入图片描述

                       3.SOAP协议
                            这块的配置没有什么特殊要求的话就保持默认吧。
在这里插入图片描述

                       3.完成配置
                            在我点击完成的时候报错提示 Property missing: AuthenticationMethod.ABAPServiceUser.Username 这个是因为安全配置那个步骤我忘记输入用户名和密码了。

在这里插入图片描述

            f.查看SOAMANAGER生成WSDL地址

                      根据上面配置完成之后我们就可以根据创建的服务获取WSDL了。
                       1.界面介绍
                            配置成功之后就会出现如下图所示,我出现了两个条目是因为我又新配置了一个为了演示那个新绑定名称的作用而已。
在这里插入图片描述
                       2.查看WSDL的URL
                            现在就可以通过如下图这个 URL 获取到WSDL了。有了这个WSDL就可以根据里面的信息进行接口的调用。但是前提你得能看懂WSDL所以下面我们会对WSDL的内容进行详解。
在这里插入图片描述
在这里插入图片描述

五、WSDL接口文档详解

          WSDL文档看起来还是比较复杂的,一个 WSDL 文件包含多个重要部分,包括服务的端点、操作、消息类型等,笔者其实也是刚接触不久,我们只需要提取里面重要的信息就行了。后期我自己对WSDL文档摸清楚后会回来填坑,谢谢大家。首先我们要解读的WSDL文档如下。

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions targetNamespace="urn:sap-com:document:sap:rfc:functions"xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap12/"xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"xmlns:tns="urn:sap-com:document:sap:rfc:functions"xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsdl:documentation><sidl:sidlxmlns:sidl="http://www.sap.com/2007/03/sidl"/></wsdl:documentation><wsp:UsingPolicy wsdl:required="true"/><wsp:Policy wsu:Id="BN__Z_GLYN_JOIN_NAME"><wsp:ExactlyOne><wsp:All><sapattahnd:Enabledxmlns:sapattahnd="http://www.sap.com/710/features/attachment/">false</sapattahnd:Enabled><saptrnbnd:OptimizedMimeSerializationxmlns:saptrnbnd="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization" wsp:Optional="true"/><wsaw:UsingAddressingxmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true"/></wsp:All><wsp:All><sapattahnd:Enabledxmlns:sapattahnd="http://www.sap.com/710/features/attachment/">false</sapattahnd:Enabled><saptrnbnd:OptimizedXMLTransfer uri="http://xml.sap.com/2006/11/esi/esp/binxml"xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/" wsp:Optional="true"/><wsaw:UsingAddressingxmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true"/></wsp:All></wsp:ExactlyOne></wsp:Policy><wsp:Policy wsu:Id="BN__Z_GLYN_JOIN_NAME_soap12"><wsp:ExactlyOne><wsp:All><sapattahnd:Enabledxmlns:sapattahnd="http://www.sap.com/710/features/attachment/">false</sapattahnd:Enabled><saptrnbnd:OptimizedMimeSerializationxmlns:saptrnbnd="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization" wsp:Optional="true"/><wsaw:UsingAddressingxmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true"/></wsp:All><wsp:All><sapattahnd:Enabledxmlns:sapattahnd="http://www.sap.com/710/features/attachment/">false</sapattahnd:Enabled><saptrnbnd:OptimizedXMLTransfer uri="http://xml.sap.com/2006/11/esi/esp/binxml"xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/" wsp:Optional="true"/><wsaw:UsingAddressingxmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true"/></wsp:All></wsp:ExactlyOne></wsp:Policy><wsp:Policy wsu:Id="IF__Z_GLYN_JOIN_NAME"><wsp:ExactlyOne><wsp:All><sapsession:Sessionxmlns:sapsession="http://www.sap.com/webas/630/soap/features/session/"><sapsession:enableSession>false</sapsession:enableSession></sapsession:Session><sapcentraladmin:CentralAdministrationxmlns:sapcentraladmin="http://www.sap.com/webas/700/soap/features/CentralAdministration/" wsp:Optional="true"><sapcentraladmin:BusinessApplicationID>000C296C4B381EDC91F239BBC731D61C</sapcentraladmin:BusinessApplicationID></sapcentraladmin:CentralAdministration></wsp:All></wsp:ExactlyOne></wsp:Policy><wsp:Policy wsu:Id="OP__Z_GLYN_JOIN_NAME"><wsp:ExactlyOne><wsp:All><saptrhnw05:requiredxmlns:saptrhnw05="http://www.sap.com/NW05/soap/features/transaction/">no</saptrhnw05:required><sapcomhnd:enableCommitxmlns:sapcomhnd="http://www.sap.com/NW05/soap/features/commit/">false</sapcomhnd:enableCommit><sapblock:enableBlockingxmlns:sapblock="http://www.sap.com/NW05/soap/features/blocking/">true</sapblock:enableBlocking><saprmnw05:enableWSRMxmlns:saprmnw05="http://www.sap.com/NW05/soap/features/wsrm/">false</saprmnw05:enableWSRM></wsp:All></wsp:ExactlyOne></wsp:Policy><wsdl:types><xsd:schema attributeFormDefault="qualified" targetNamespace="urn:sap-com:document:sap:rfc:functions"><xsd:simpleType name="char10"><xsd:restriction base="xsd:string"><xsd:maxLength value="10"/></xsd:restriction></xsd:simpleType><xsd:element name="Z_GLYN_JOIN_NAME"><xsd:complexType><xsd:sequence><xsd:element name="IV_FIRSTNAME" type="tns:char10" minOccurs="0"/><xsd:element name="IV_LASTNAME" type="tns:char10" minOccurs="0"/></xsd:sequence></xsd:complexType></xsd:element><xsd:element name="Z_GLYN_JOIN_NAMEResponse"><xsd:complexType><xsd:sequence><xsd:element name="EV_RESNAME" type="tns:char10"/></xsd:sequence></xsd:complexType></xsd:element></xsd:schema></wsdl:types><wsdl:message name="Z_GLYN_JOIN_NAME"><wsdl:part name="parameters" element="tns:Z_GLYN_JOIN_NAME"/></wsdl:message><wsdl:message name="Z_GLYN_JOIN_NAMEResponse"><wsdl:part name="parameter" element="tns:Z_GLYN_JOIN_NAMEResponse"/></wsdl:message><wsdl:portType name="Z_GLYN_JOIN_NAME"><wsdl:documentation><sapdoc:sapdocxmlns:sapdoc="urn:sap:esi:documentation"><sapdoc:docitem docURL="http://mysap.goodsap.cn:50400/sap/bc/esdt/docu/sd_text?sap-client=400&amp;sd_name=Z_GLYN_JOIN_NAME"/></sapdoc:sapdoc></wsdl:documentation><wsp:Policy><wsp:PolicyReference URI="#IF__Z_GLYN_JOIN_NAME"/></wsp:Policy><wsdl:operation name="Z_GLYN_JOIN_NAME"><wsp:Policy><wsp:PolicyReference URI="#OP__Z_GLYN_JOIN_NAME"/></wsp:Policy><wsdl:input message="tns:Z_GLYN_JOIN_NAME"/><wsdl:output message="tns:Z_GLYN_JOIN_NAMEResponse"/></wsdl:operation></wsdl:portType><wsdl:binding name="Z_GLYN_JOIN_NAME" type="tns:Z_GLYN_JOIN_NAME"><wsp:Policy><wsp:PolicyReference URI="#BN__Z_GLYN_JOIN_NAME"/></wsp:Policy><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><wsdl:operation name="Z_GLYN_JOIN_NAME"><soap:operation soapAction="urn:sap-com:document:sap:rfc:functions:Z_GLYN_JOIN_NAME:Z_GLYN_JOIN_NAMERequest" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:binding name="Z_GLYN_JOIN_NAME_soap12" type="tns:Z_GLYN_JOIN_NAME"><wsp:Policy><wsp:PolicyReference URI="#BN__Z_GLYN_JOIN_NAME_soap12"/></wsp:Policy><wsoap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><wsdl:operation name="Z_GLYN_JOIN_NAME"><wsoap12:operation soapAction="urn:sap-com:document:sap:rfc:functions:Z_GLYN_JOIN_NAME:Z_GLYN_JOIN_NAMERequest" style="document"/><wsdl:input><wsoap12:body use="literal"/></wsdl:input><wsdl:output><wsoap12:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="Z_GLYN_JOIN_NAME"><wsdl:port name="Z_GLYN_JOIN_NAME" binding="tns:Z_GLYN_JOIN_NAME"><soap:address location="http://mysap.goodsap.cn:50400/sap/bc/srt/rfc/sap/z_glyn_join_name/400/z_glyn_join_name/z_glyn_join_name"/></wsdl:port><wsdl:port name="Z_GLYN_JOIN_NAME_soap12" binding="tns:Z_GLYN_JOIN_NAME_soap12"><wsoap12:address location="http://mysap.goodsap.cn:50400/sap/bc/srt/rfc/sap/z_glyn_join_name/400/z_glyn_join_name/z_glyn_join_name"/></wsdl:port></wsdl:service></wsdl:definitions>

            a.WSDL 文件结构

                      这里重要的东西是 xmlns:tns=“urn:sap-com:document:sap:rfc:functions” 这个属性值会在我们制作请求体内容的时候用到,没有它会请求失败的。它在倒数第三行哦,具体来说它是命名空间后面会详细介绍命名空间的作用。

在这里插入图片描述

            b.Documentation

                      这个是个可选 元素,它意思你要是想获得更多关于这份WSDL文档的注释与描述应该去 http://www.sap.com/2007/03/sidl 网站 ,这个很好理解因为这文档其实就是SAP生成提供的。
在这里插入图片描述

            c.Policy

                      这里主要定义了策略的逻辑组合,策略(Policy)的逻辑组合用于定义 Web 服务的行为和特性,如安全性、事务性、消息传递可靠性等。策略的逻辑组合允许服务提供者和服务消费者明确和协商这些特性,以确保服务的正确和安全运行。

                      < wsp:ExactlyOne > 下面可以包含多个 < wsp:All > 表示策略中有多个选项,客户端和服务端必须选择其中一个。在我们的文档中 < wsp:ExactlyOne > 标签下面有两组策略组合因为有两个 < wsp:All > 标签。

                      < wsp:All > 表示策略中的所有选项都必须满足。你选择了组合一那么就得满足组合一的所有要求,选择组合二也是一样的。
在这里插入图片描述

            d.Types

                      这里定义了数据类型,和入参出参 以及参数的可选还是必输,但其实这里并不是真实定义出参入参的地方,这里你可以理解为只是定义还没使用,真正对入参出参起效果的是Messages,其实这些标签还有其他的属性后期遇到了再过来补充吧。
在这里插入图片描述

            e.Messages

                      这里才算定义了入参出参吧,它这样设计可能是为了复用吧。你看这里的定义就能跟上面哪些名称对应起来了吧。
在这里插入图片描述

            f.Port Types

                      根据上面的那些定义理解着看下图就行了。
在这里插入图片描述

            g.Bindings

                      Bindings 部分,用于将抽象的端口类型(portType)Z_GLYN_JOIN_NAME 绑定到具体的通信协议和消息格式。
在这里插入图片描述

            h.Services

                      Services 部分,用于定义具体服务的端口信息和通信地址。这里才是真正接口的调用地址。
在这里插入图片描述

六、Postman调用webservice接口

          要正确调用一个接口必须遵循它的各种标准,首先我们要知道 请求URL、还有调用的方式是GET还是POST或者其他、还有请求头、请求体、权限设定,这些基本内容。

            a.请求URL

                      请求URL在WSDL中Services标签里面,具体就是 < soap:address location=“”/> 标签里面的location属性 http://mysap.goodsap.cn:50400/sap/bc/srt/rfc/sap/z_glyn_join_name/400/z_glyn_join_name/z_glyn_join_name

            b.请求方式

                      如果文档没有在 binding 部分明确指出的话一般就用 POST,因为HTTP协议的GET 方法不常用于 SOAP,它会将消息体包含在 URL 中,存在长度和安全性问题。如果有明确指出用GET的话就会如下图所示。
在这里插入图片描述

            c.请求头

                      请求头主要是设置 Content-Type 因为webservice通信消息格式是XML,所以要指明消息类型为XML,如果没有其他特殊需求的话一般设置一个Content-Type就行了。

            d.请求体

                      请求体设置还是有点东西的,这个玩意要你自己根据WSDL文档中信息推导出来。我先把我们这个接口请求体的内容放下面然后再慢慢解释。

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:rfc:functions"><soapenv:Header/><soapenv:Body><urn:Z_GLYN_JOIN_NAME><IV_FIRSTNAME>托尼</IV_FIRSTNAME><IV_LASTNAME>斯塔克</IV_LASTNAME></urn:Z_GLYN_JOIN_NAME></soapenv:Body>
</soapenv:Envelope>

                      首先webservice的请求体有这么几个内容:

                          1、 Envelope:SOAP 请求体必须包含 Envelope 元素作为根元素。
                                 上述的Envelope标签中有两个属性 xmlns:soapenv、xmlns:urn 前者是 SOAP 协议的命名空间用于定义 SOAP 消息结构中的标准元素,如 Envelope、Header 和 Body。 后者是 SAP 系统中的特定命名空间,用于定义与 SAP RFC 相关的元素和数据类型。urn 是命名空间的前缀,可以在 XML 文档中用于引用该命名空间中的元素。使用这些命名空间前缀可以明确区分不同来源的元素,确保 XML 文档的结构和内容被正确解析和处理。如果没有命名空间的指定 那么就无法获取WSDL准确的元素定义。所以这两个命名空间搬过来的时候一定要搬对。

                          2、 Header:SOAP 请求体可以包含可选的 Header 元素。
                                 这里可以不用设置请求头内容。

                          3、 Body:SOAP 请求体必须包含 Body 元素,里面包含实际的消息。
                                 Body里面的元素相对来说好理解一点,主要是这个 urn 命名空间要写对,要对应的上。urn是一个命名空间前缀,代表一个URI(统一资源标识符)命名空间。这种命名空间前缀用于区分和标识XML元素和属性,以避免命名冲突。 < urn:Z_GLYN_JOIN_NAME> 代表调用的具体方法或操作是 Z_GLYN_JOIN_NAME

            e.调用查看返回结果

                      1、 设置 URL、调用方式、请求头。
在这里插入图片描述

                      2、 请求体与返回结果
在这里插入图片描述

            f.权限配置

                      上面接口调用的时候没有任何权限验证任何人都可以调用,现在我们修改服务配置来加上认证方式。
                       1.修改配置重新发版
                            记得重新发版一下。
在这里插入图片描述

                       2.效果演示
                            可以看到现在调用结果变了 提示权限问题。我将返回内容在浏览器解析之后画面如下。
在这里插入图片描述
在这里插入图片描述
                       3.设置授权
                            如下图设置授权。
在这里插入图片描述

七、其他编程语言调用

          上面我们用POSTMAN调用成功了下面我们再用常用的编程语言调用试一下。

            a.Python调用

                      由于笔者对Python比较熟悉所以这里我也只用Python演示一下,其他语言的话也都大同小异,你们自己试试就行了。
                       1.效果演示
                            源码在下面。
在这里插入图片描述

                       2.Copy Code
                            pass

import requests
from requests.auth import HTTPBasicAuth# 请求url
url = "http://mysap.goodsap.cn:50400/sap/bc/srt/rfc/sap/z_glyn_join_name/400/z_glyn_join_name/z_glyn_join_name"# 设置请求头
headers = {'Content-Type': 'text/xml;charset=UTF-8',# 这个SOAPAction没试出来效果不加也没关系跟postman保持一致即可。# 'SOAPAction': 'urn:sap-com:document:sap:rfc:functions:Z_GLYN_JOIN_NAME:Z_GLYN_JOIN_NAMERequest'
}# 设置请求体
body = """
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:rfc:functions"><soapenv:Header/><soapenv:Body><urn:Z_GLYN_JOIN_NAME><IV_FIRSTNAME>托尼</IV_FIRSTNAME><IV_LASTNAME>斯塔克</IV_LASTNAME></urn:Z_GLYN_JOIN_NAME></soapenv:Body>
</soapenv:Envelope>
"""
# 有权限验证这样调用
response = requests.post(url, data=body, headers=headers, auth=HTTPBasicAuth('uname', 'upwd'))
# 没权限校验这样调用
response = requests.post(url, data=body, headers=headers)
print(response.text)

八、总结

        以上就是今天要讲的内容,本文仅仅简单介绍了SAP如何配置发布webservice并调用以及webservice的一些其他扩展内容,感觉笔者讲的好对自己有帮助的还麻烦点个免费的赞赞制作不易谢谢谢谢!!!如果有说错或者不好的地方还望大家提出来见谅。感觉笔者写的好的别忘了关注点赞加评论哦,也欢迎大家一起来讨论。谢谢!

相关文章:

SAP配置发布WebService接口并调用(超级详细)

文章目录 前言一、案例介绍/笔者需求二、WebService是什么&#xff1f; a.传输协议 b.数据协议 c.WSDL d.UDDI 三、WebService 和 WebApi 的区别以及优缺点 a.主要区别 b.优缺点 四、SAP如何发布一个webser…...

中英双语介绍美国首都:华盛顿哥伦比亚特区(Washington, D.C.)

中文版 华盛顿哥伦比亚特区&#xff08;Washington, D.C.&#xff09;&#xff0c;简称华盛顿或D.C.&#xff0c;是美国的首都和联邦直辖区。以下是对华盛顿哥伦比亚特区各方面的详细介绍&#xff1a; 人口 截至2020年&#xff0c;美国人口普查数据显示&#xff0c;华盛顿哥…...

java:aocache的单实例缓存(一)

上一篇博客《java:aocache:基于aspectJ实现的方法缓存工具》介绍了aocache的基本使用&#xff0c; 介绍AoCacheable注解时说过&#xff0c;AoCacheable可以定义在构造方法上&#xff0c;定义在构造方法&#xff0c;该构建方法就成了单实例模式。 也就是说&#xff0c;只要构建…...

pcap包常见拆分方法

文章目录 Wireshark 拆分流量包SplitCap使用简介魔数报错示例结果 在进行流量分析时&#xff0c;经常需要分析pcap流量包。但是体积过大的流量包不容易直接分析&#xff0c;经常需要按照一定的规则把它拆分成小的数据包。 这里统一选择cic数据集里的Thursday-WorkingHours.pcap…...

C++中的类型转换操作符:static_cast reinterpret_cast const_cast dynamic_cast

目录​​​​​​​ C语言中的类型转换 C中的类型转换 C中的类型转换操作符 static_cast reinterpret_cast const_cast volatile关键字 赋值兼容 dynamic_cast C语言中的类型转换 基本概念&#xff1a;赋值运算符左右两侧类型不同&#xff0c;或形参与实参类型不匹配…...

MySQL-SQL优化Explain命令以及参数详解

前言 在MySQL优化的众多手段中&#xff0c;EXPLAIN命令扮演着至关重要的角色。它是数据库管理员和开发者手中的利器&#xff0c;用于分析SQL查询的执行计划。通过执行EXPLAIN&#xff0c;MySQL会提供一份详细的查询执行计划报告&#xff0c;这份报告揭示了查询将如何执行&…...

别只会重启了!进来告诉你AP无法上线怎么办

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 你们好&#xff0c;我的网工朋友。 作为网工&#xff0c;咱们都知道无线网络的重要性&#xff0c;尤其是对于企业网络来说&#xff0c;无线接入点…...

数据恢复篇:如何在 Android 手机上恢复未保存/删除的 Word 文档

在 Android 手机上访问 Word 文档通常很简单&#xff0c;但是当这些重要文件被删除或未保存时会发生什么&#xff1f;这种情况虽然令人痛苦&#xff0c;但并非毫无希望。到 2024 年&#xff0c;有几种强大的方法来处理此类数据丢失。本指南重点介绍如何在Android手机上恢复已删…...

Python | Leetcode Python题解之第208题实现Trie(前缀树)

题目&#xff1a; 题解&#xff1a; class Trie:def __init__(self):self.children [None] * 26self.isEnd Falsedef searchPrefix(self, prefix: str) -> "Trie":node selffor ch in prefix:ch ord(ch) - ord("a")if not node.children[ch]:retur…...

Ethernet是以太网通讯

...

咖啡消费旺季到来 为何想转让的库迪联营商却越来越多

文 | 智能相对论 作者 | 霖霖 去年还在朝“三年万店”计划狂奔的库迪&#xff0c;今年已出现明显“失速”。 早在今年2月&#xff0c;库迪就官宣其门店数已超过7000家&#xff0c;如今4个多月过去&#xff0c;据极海品牌监测数据显示&#xff0c;截至6月27日&#xff0c;其总…...

神经网络原理

神经网络原理是一种模拟人脑的机器学习技术&#xff0c;通过大量的神经元和层次化的连接进行信息处理和学习。 图1 神经元 神经网络由许多简单的计算单元或“神经元”组成&#xff0c;这些神经元通过连接传递信息。每个连接都有一个权重&#xff0c;用于调整传递的信号强度。这…...

安卓应用开发学习:获取经纬度及地理位置描述信息

前段时间&#xff0c;我在学习鸿蒙应用开发的过程中&#xff0c;在鸿蒙系统的手机上实现了获取经纬度及地理位置描述信息&#xff08;鸿蒙应用开发学习&#xff1a;手机位置信息进阶&#xff0c;从经纬度数据获取地理位置描述信息&#xff09;。反而学习时间更长的安卓应用开发…...

各类排序方法 手撕快排 回顾经典快排 优化版快排

快排的主要思想是分而治之 第一步&#xff0c;确定分界点&#xff0c;a 第二步&#xff0c;调整区间&#xff0c;利用分界点a&#xff0c;把小于分界点a的数放在左边&#xff0c;大于的放在右边&#xff0c;相等的放在哪都可以 第三步&#xff0c;递归处理左右两段 实现(暴…...

独一无二的设计模式——单例模式(Java实现)

1. 引言 亲爱的读者们&#xff0c;欢迎来到我们的设计模式专题&#xff0c;今天的讲解的设计模式&#xff0c;还是单例模式哦&#xff01;上次讲解的单例模式是基于Python实现&#xff08;独一无二的设计模式——单例模式&#xff08;python实现&#xff09;&#xff09;的&am…...

使用MoA(Mixture of Agents)混合智能体技术,结合多个开源大语言模型如Llama3、phi-3和Mistral,实现一个强大的AI智能体

1.简介 论文简介: 论文提出了一种称为混合智能体(Mixture-of-Agents,MoA)的方法,利用多个大语言模型(LLM)的集体智慧来提高自然语言理解和生成任务的性能。 MoA采用了分层结构,每一层包含多个LLM智能体。每个智能体都将前一层所有智能体的输出作为辅助信息来生成自己的回答。通…...

前端面试题_Css

一、说一下Css的盒子模型&#xff1f; HTML中所有元素都可以看成是一个盒子 盒子的组成&#xff1a;content、padding、border、margin 盒子的类型&#xff1a; 标准盒模型&#xff1a;marginborderpaddingcontent -- box-sizing&#xff1a;content-box&#xff08;默认&a…...

AI在线免费视频工具3:声音生视频

1、声音生视频 Noisee&#xff1a;通过声音生成对应视频&#xff0c;可以增加prompt指定生成内容相关视频 https://noisee.ai/create...

final、const、readonly关键字在不同语言中代表着什么

一、Java 1.被final修饰的类不能被继承。 2.被final修饰的方法不能被重写。 被 final 修饰的类中所有的成员方法都会隐式的定义为 final 方法。 若父类中 final 方法的访问权限为 private &#xff0c;则子类中不能直接继承该方法。此时可以在子类中定义相同方法名的函数&…...

HarmonyOS ArkUi Tabs+TabContent+List实现tab吸顶功能

Demo效果 Entry Component struct StickyNestedScroll {State message: string Hello WorldState arr: number[] []scroller new Scroller()StyleslistCard() {.backgroundColor(Color.White).height(72).width("100%").borderRadius(12)}build() {Scroll(this.sc…...

Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed

社区中有两个流行的零冗余优化器 (Zero Redundancy Optimizer&#xff0c;ZeRO)算法实现&#xff0c;一个来自DeepSpeed&#xff0c;另一个来自PyTorch。Hugging FaceAccelerate对这两者都进行了集成并通过接口暴露出来&#xff0c;以供最终用户在训练/微调模型时自主选择其中之…...

TextField是用于在用户界面中输入文本的控件。它广泛应用于表单、搜索框、评论区等需要用户输入文字的场景

TextField是用于在用户界面中输入文本的控件。它广泛应用于表单、搜索框、评论区等需要用户输入文字的场景。以下是对TextField的详细解释&#xff0c;涵盖其各个方面的功能和属性。 基本属性 text 描述&#xff1a;TextField中当前显示的文本。用法&#xff1a;text: "示…...

MYSQL 四、mysql进阶 5(InnoDB数据存储结构)

一、数据库的存储结构&#xff1a;页 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的&#xff0c;确切说时存储在页结构中&#xff0c;另一方面&#xff0c;索引是在存储引擎中实现的&#xff0c;Mysql服务器上的存储引擎负责对表…...

Spring企业开发核心框架-下

五、Spring AOP面向切面编程 1、场景设定和问题复现 ①准备AOP项目 项目名&#xff1a;Spring-aop-annotation ②声明接口 /*** - * / 运算的标准接口!*/ public interface Calculator { int add(int i, int j); int sub(int i, int j); int mul(int i, in…...

X射线底片焊缝缺陷检测

实现四种焊缝缺陷的检测和分割处理。...

直播的js代码debug解析找到protobuf消息的定义

我们都知道直播的弹幕消息是通过websocket发送的&#xff0c;而且是通过protobuf传输的&#xff0c;那么这里面传输了哪些内容&#xff0c;这个proto文件又要怎么定义&#xff1f;每个消息叫什么&#xff0c;消息里面又包含有哪些字段&#xff0c;每个字段又是什么类型&#xf…...

详细学习es6扩展运算符

ES6中的扩展运算符&#xff08;Spread Operator&#xff09;是一种非常方便的语法&#xff0c;主要用于将可迭代对象&#xff08;比如数组、字符串等&#xff09;展开成多个参数。以下是关于ES6扩展运算符的详细内容&#xff1a; 用法&#xff1a; 在数组字面量中展开数组&am…...

HEC-HMS水文模型教程

原文链接&#xff1a;HEC-HMS水文模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607904&idx5&sn1a210328a3fc8f941b433674d8fe2c85&chksmfa826787cdf5ee91d01b6981ebd89deac3e350d747d0fec45ce2ef75d7cb8009341c6f55114d&token90645021…...

Spring Cloud LoadBalancer基础入门与应用实践

官网地址&#xff1a;https://docs.spring.io/spring-cloud-commons/reference/spring-cloud-commons/loadbalancer.html 【1】概述 Spring Cloud LoadBalancer是由SpringCloud官方提供的一个开源的、简单易用的客户端负载均衡器&#xff0c;它包含在SpringCloud-commons中用…...

layui在表格中嵌入上传按钮,并修改上传进度条

当需要在表格中添加上传文件按钮&#xff0c;并不需要弹出填写表单的框的时候&#xff0c;需要在layui中&#xff0c;用按钮触发文件选择 有一点需要说明的是&#xff0c;layui定义table并不是在定义的标签中渲染&#xff0c;而是在紧接着的标签中渲染&#xff0c;所以要获取实…...

14-10 AIGC 项目生命周期——第一阶段

生成式 AI 项目生命周期的整个过程类似于从范围、选择、调整和对齐/协调模型以及应用程序集成开始的顺序依赖过程。流程表明每个步骤都建立在前一步的基础上。有必要了解每个阶段对于项目的成功都至关重要。 下面的流程图重点介绍了生成式 AI 项目生命周期的第一阶段 1 — “范…...

经典小游戏(一)C实现——三子棋

switch(input){case 1:printf("三子棋\n");//这里先测试是否会执行成功break;case 0:printf("退出游戏\n");break;default :printf("选择错误&#xff0c;请重新选择!\n");break;}}while(input);//直到输入的结果为假&#xff0c;循环才会结束} …...

如何利用AI生成可视化图表(统计图、流程图、思维导图……)免代码一键绘制图表

由于目前的AI生成图表工具存在以下几个方面的问题&#xff1a; 大多AI图表平台是纯英文&#xff0c;对国内用户来说不够友好&#xff1b;部分平台在生成图表前仍需选择图表类型、配置项&#xff0c;操作繁琐&#xff1b;他们仍需一份规整的数据表格&#xff0c;需要人为对数据…...

Firefox 编译指南2024 Windows10-使用Git 管理您的Firefox(五)

1. 引言 在现代软件开发中&#xff0c;版本控制系统&#xff08;VCS&#xff09;是不可或缺的工具&#xff0c;它不仅帮助开发者有效管理代码的变化&#xff0c;还支持团队协作与项目管理。Mercurial 是一个高效且易用的分布式版本控制系统&#xff0c;其设计目标是简洁、快速…...

ubuntu 18 虚拟机安装(1)

ubuntu 18 虚拟机安装 ubuntu 18.04.6 Ubuntu 18.04.6 LTS (Bionic Beaver) https://releases.ubuntu.com/bionic/ 参考&#xff1a; 设置固定IP地址 https://blog.csdn.net/wowocpp/article/details/126160428 https://www.jianshu.com/p/1d133c0dec9d ubuntu-18.04.6-l…...

Github 上 Star 数最多的大模型应用基础服务 Dify 深度解读(一)

背景介绍 接触过大模型应用开发的研发同学应该都或多或少地听过 Dify 这个大模型应用基础服务&#xff0c;这个项目自从 2023 年上线以来&#xff0c;截止目前&#xff08;2024-6&#xff09;已经获得了 35k 多的 star&#xff0c;是目前大模型应用基础服务中最热门的项目之一…...

XStream导出xml文件

最终效果 pom依赖 <dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.11.1</version></dependency>代码 XStreamUtil 这个直接复制即可 import com.thoughtworks.xst…...

陪诊小程序搭建:构建便捷医疗陪诊服务的创新实践

在当今快节奏的社会&#xff0c;医疗服务与人们的生活息息相关。然而&#xff0c;在医疗体系中&#xff0c;患者往往面临着信息不对称、流程繁琐、陪伴需求得不到满足等问题。为了解决这些问题&#xff0c;我们提出了一种创新的解决方案——陪诊小程序&#xff0c;旨在为患者提…...

0139__TCP协议

全网最详细TCP参数讲解&#xff0c;再也不用担心没有面试机会了_tcp的参数-CSDN博客 TCP协议详解-腾讯云开发者社区-腾讯云 TCP-各种参数 - 简书...

家政小程序的开发,带动市场快速发展,提高家政服务质量

当下生活水平逐渐提高&#xff0c;也增加了年轻人的工作压力&#xff0c;同时老龄化也在日益增加&#xff0c;使得大众对家政的需求日益提高&#xff0c;能力、服务质量高的家政人员能够有效提高大众的生活幸福指数。 但是&#xff0c;传统的家政服务模式存在着效率低、用户与…...

JavaScript高级程序设计(第四版)--学习记录之对象、类与面向对象编程(下)

类 ES6新引入class关键字具有正式定义类的能力。 类定义&#xff1a;类声明和类表达式。 // 类声明 class Person {} // 类表达式 const Animal class {}; 类定义与函数定义的不同&#xff1a; 1&#xff1a;函数声明可以提升&#xff0c;类定义不能 2&#xff1a;函数受函数…...

PDF 生成(5)— 内容页支持由多页面组成

当学习成为了习惯&#xff0c;知识也就变成了常识。 感谢各位的 关注、点赞、收藏和评论。 新视频和文章会第一时间在微信公众号发送&#xff0c;欢迎关注&#xff1a;李永宁lyn 文章已收录到 github 仓库 liyongning/blog&#xff0c;欢迎 Watch 和 Star。 回顾 在本篇开始…...

day 51 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离

115. 不同的子序列 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 示例 1&#xff1a; 输入&#xff1a;s "rabbbit", t "rabbit" 输出&#xff1a;3 解释&#xff1a; 如下所示,…...

http包详解

http包的作用及使用 go的http包是go的web编程的核心内容&#xff0c;go的web框架本质上都是基于http提供的组件进行再度封装。我们来看一下http基本的使用&#xff1a; func main() {http.Handle("/get", GetVal())http.Handle("/hello", Hello())http.H…...

Reqable实战系列:Flutter移动应用抓包调试教程

Flutter应用网络请求调试一直是业内难题&#xff0c;原因在于Dart语言标准库的网络请求不会走Wi-Fi代理&#xff0c;常规通过配置Wi-Fi代理来抓包的方式行不通。这给我们日常开发测试造成了很大的阻碍&#xff0c;严重降低工作效率。因此写一篇教程&#xff0c;讲解如何使用Req…...

乾元通渠道商中标吴忠市自然灾害应急能力提升项目

近日&#xff0c;乾元通渠道商中标宁夏回族自治区吴忠市自然灾害应急能力提升项目&#xff0c;乾元通作为设备厂家&#xff0c;为项目提供通信指挥类装备&#xff08;多链路聚合设备&#xff09;QYT-X1。 青岛乾元通数码科技有限公司作为国家应急产业企业&#xff0c;深耕于数据…...

护网蓝队面试

一、sql注入分类 **原理&#xff1a;**没有对用户输入项进行验证和处理直接拼接到查询语句中 查询语句中插⼊恶意SQL代码传递后台sql服务器分析执行 **从注入参数类型分&#xff1a;**数字型注入、字符型注入 **从注入效果分&#xff1a;**报错注入、布尔注入、延时注入、联…...

【高考志愿】金融学

目录 一、金融学类专业概述 二、主要课程 三、就业前景与方向 四、适合人群 五、金融学学科排名 六、总结 高考志愿选择金融学&#xff0c;无疑是一个既充满挑战又极具前景的决策。金融学&#xff0c;作为经济学门类下的重要分支&#xff0c;不仅涵盖了广泛的金融领域知识…...

返利App的用户行为分析与数据驱动决策

返利App的用户行为分析与数据驱动决策 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨返利App中的用户行为分析与数据驱动决策的技术细节和实…...

python基础:高级数据类型:集合

1、集合的定义 集合是一个无序且无重复元素的列表。其定义与数学定义一致。其无序和不重复和字典特征类似&#xff0c;但是无“值”。 2、集合的创建 集合一般由列表创建&#xff0c;在初始化列表时保证其元素唯一性&#xff0c;即为集合。 创建方法&#xff1a;x set(list…...

信息安全体系架构设计

对信息系统的安全需求是任何单一安全技术都无法解决的&#xff0c;要设计一个信息安全体系架构&#xff0c;应当选择合适的安全体系结构模型。信息系统安全设计重点考虑两个方面&#xff1b;其一是系统安全保障体系&#xff1b;其二是信息安全体系架构。 1.系统安全保障体系 安…...

ora-15025 ora-27041问题处理

这个问题先排查 [oracleracdg2-2 ~]$ cd $ORACLE_HOME/bin [oracleracdg2-2 bin]$ ls -ld oracle -rwsr-s--x 1 oracle oinstall 239626641 Jun 25 19:09 oracle 正常的属组是 [gridracdg2-1 ~]$ setasmgidwrap -o /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle […...

Docker-compose 实现Prometheus+Grafana监控MySQL及Linux主机

. ├── Grafana │ ├── data │ └── docker-compose.yaml ├── Mysql │ ├── conf │ ├── data │ ├── docker-compose.yaml │ └── logs ├── Mysqld_exporter │ ├── conf │ └── docker-compose.yaml ├── node-exporter │…...

华为DCN之:SDN和NFV

1. SDN概述 1.1 SDN的起源 SDN&#xff08;Software Defined Network&#xff09;即软件定义网络。是由斯坦福大学Clean Slate研究组提出的一种新型网络创新架构。其核心理念通过将网络设备控制平面与数据平面分离&#xff0c;从而实现了网络控制平面的集中控制&#xff0c;为…...

go语言怎么向kafka推送消息?

在Go语言中&#xff0c;你可以使用confluent-kafka-go&#xff08;也称为librdkafka的Go客户端&#xff09;或segmentio/kafka-go等第三方库来与Apache Kafka交互&#xff0c;并向其推送&#xff08;或生产&#xff09;消息。以下是使用confluent-kafka-go库向Kafka推送消息的简…...

DJYGUI AI低代码图形编程开发平台:开启嵌入式软件图形编程新纪元

在科技高速发展的当今时代&#xff0c;软件开发行业对创新和高效的需求日益增长。DJYGUI AI低代码图形编程开发平台的出现&#xff0c;为智能屏、物联屏、串口屏等嵌入式显示设备领域带来了全新的机遇。该平台由都江堰操作系统 AI 代码自动生成平台研发&#xff0c;具有显著的优…...

电动新浪潮:长安马自达CX-50与深蓝S7设计美学的较量

在电动化的浪潮中,汽车不仅是代步工具,更是个性与品味的展现。今天,我们将深入探讨两款电动SUV——长安马自达CX-50与深蓝S7,它们如何在设计美学上各领风骚,又如何在电动化的大潮中各显神通。随着环保理念的深入人心和政策的推动,电动车市场迎来了爆发式增长。消费者不再…...

【微服务】springboot 构建docker镜像多模式使用详解

目录 一、前言 二、微服务常用的镜像构建方案 3.1 使用Dockerfile 3.2 使用docker plugin插件 3.3 使用docker compose 编排文件 三、环境准备 3.1 服务器 3.2 安装JDK环境 3.2.1 创建目录 3.2.2 下载安装包 3.2.3 配置环境变量 2.2.4 查看java版本 3.3 安装maven …...

低代码开发难吗?

在软件开发的多样化浪潮中&#xff0c;低代码开发平台以其简化的编程模型&#xff0c;为IT行业带来了新的活力。作为一位资深的IT技术员&#xff0c;我对低代码开发平台的易用性和强大功能有着深刻的认识。今天&#xff0c;我将分享我对YDUIbuilder这一免费开源低代码平台的使用…...

哈工大机器人竞技队成立22年来4次获国际冠军

另获得中国冠/亚/季军13次、国家级科技奖励60余次、省级科技竞赛奖励50余次、多次获得“最佳技术奖”。早在2009年就力克群雄获得唯一一张亚太大学生机器人大赛的入场卷&#xff0c;代表中国在东京5场全胜获得冠军。 2013届队员王永锟填报高考志愿时&#xff0c;恰巧看到哈工大…...

Flutter 中的 FractionalTranslation 小部件:全面指南

Flutter 中的 FractionalTranslation 小部件&#xff1a;全面指南 在 Flutter 的丰富布局库中&#xff0c;FractionalTranslation 是一个允许你将子组件沿着一个轴或两个轴进行部分平移的动画小部件。这种类型的平移通常用于创建滑动效果&#xff0c;如卡片的滑动删除或滑动展…...

信息标记形式 (XML, JSON, YAML)

文章目录 &#x1f5a5;️介绍&#x1f5a5;️三种形式&#x1f3f7;️XML (Extensible Markup Language)&#x1f516;规范&#x1f516;注释&#x1f516;举例&#x1f516;其他 &#x1f3f7;️JSON (JavaScript Object Notation)&#x1f516;规范&#x1f516;注释&#x…...