包含服务的OData批处理请求导致错误" 400 Bad Request"

2020-09-15 04:02发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有两个OData服务,其中服务A包含在服务B中,这样服务A的实体集在服务B中可用。我可以使用服务B的URL对服务A的对象进行OData请求。 到目前为止很好。 现在出现问题了:

我想对服务B使用$ batch请求对服务A对象执行一些POST操作,然后对服务B对象执行GET操作。但是似乎在一个批处理请求中,它不是 可以访问多种服务。

首先,这是服务B的批处理请求正文的样子:

-批量
 内容类型:多部分/混合; 边界=变更集
 --changeset
 内容类型:application/http 
内容传输编码:二进制 POST ObjectOfServiceA HTTP/1.1
内容类型:application/json
接受:application/json

{ " d":{...}}
--changeset
内容类型:application/http
内容传输编码:二进制 POST ObjectOfServiceA HTTP/1.1
内容类型 :application/json
接受:application/json {" d":{...}}
--changeset
----批量
内容类型:application/http
内容传输编码:二进制
GET ObjectOfServiceBSet HTTP/1.1
Content-Transfer-Encoding:二进制
接受:application/json
-批处理-

这是响应:

-1A4D3E35A859852802C3FC28D388D15A0
 内容类型:多部分/混合; 边界= 1A4D3E35A859852802C3FC28D388D15A1
 内容长度:1664

 --1A4D3E35A859852802C3FC28D388D15A1
 内容类型:application/http
 内容长度:687
 内容传输编码:二进制

 HTTP/1.1 201已创建
 内容类型:application/json
 内容长度:441
 位置: ...
 数据服务版本:2.0

 {" d":{...}}
 --1A4D3E35A859852802C3FC28D388D15A1
 内容类型:application/http
 内容长度:680
 内容传输编码:二进制

 HTTP/1.1 201已创建
 内容类型:application/json
 内容长度:435
 位置: ...
 数据服务版本:2.0

 {" d":{...}}
 --1A4D3E35A859852802C3FC28D388D15A1--

 --1A4D3E35A859852802C3FC28D388D15A0
 内容类型:application/http
 内容长度:900
 内容传输编码:二进制

 HTTP/1.1 400错误请求
 内容类型:application/json; charset = utf-8
 内容长度:780
 数据服务版本:1.0

 {"错误":{"代码":"/img/IWBEP/CM_MGW_RT/101","消息":{" lang":" de","值":" Datenobjekt
  \" ObjectOfServiceB \" nicht
 gefunden。"}," innererror":{" application":{" component_id":""," service_namespace":"/img/SAP/"," service_id":" ServiceB"," service_version":" 0001"},"  transactionid":" 025E6B2B00C80030E005B61A5CBF7889","时间戳":" 20180802102034.1571200"," Error_Resolution":{" SAP_Transaction":"运行
  SAP Gateway Hub系统上的事务/IWFND/ERROR_LOG并搜索
 带有时间戳的条目,以获取更多详细信息"," SAP_Note":"请参阅SAP
 注释1797736用于错误分析
 (https://service.sap.com/sap/support/notes/1797736)"},"errordetails":[{"code":"/img/IWBEP/CX_MGW_MED_EXCEPTION","message":"Datenobjekt
  \" ObjectOfServiceB \" nicht
 gefunden"," propertyref":"","严重性":"错误","目标":""}]}}}}
 --1A4D3E35A859852802C3FC28D388D15A0-

如您所见,在数据模型中找不到ObjectOfServiceB。 我实际上可以在代码中看到Netweaver Gateway Logik试图在服务A的模型中找到ObjectOfServiceB。

如果我颠倒了服务A上的POST请求和服务B上的GET的顺序,则错误会更改,从而找不到ObjectOfServiceA。

似乎,如果有一个包含的服务,则用于实例化包含数据模型的MGW运行时的代码只是针对批处理请求中首先出现的任何服务,而不是随后的任何服务。

有人对如何解决这个问题有想法吗?

关于丹尼尔

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有两个OData服务,其中服务A包含在服务B中,这样服务A的实体集在服务B中可用。我可以使用服务B的URL对服务A的对象进行OData请求。 到目前为止很好。 现在出现问题了:

我想对服务B使用$ batch请求对服务A对象执行一些POST操作,然后对服务B对象执行GET操作。但是似乎在一个批处理请求中,它不是 可以访问多种服务。

首先,这是服务B的批处理请求正文的样子:

-批量
 内容类型:多部分/混合; 边界=变更集
 --changeset
 内容类型:application/http 
内容传输编码:二进制 POST ObjectOfServiceA HTTP/1.1
内容类型:application/json
接受:application/json

{ " d":{...}}
--changeset
内容类型:application/http
内容传输编码:二进制 POST ObjectOfServiceA HTTP/1.1
内容类型 :application/json
接受:application/json {" d":{...}}
--changeset
----批量
内容类型:application/http
内容传输编码:二进制
GET ObjectOfServiceBSet HTTP/1.1
Content-Transfer-Encoding:二进制
接受:application/json
-批处理-

这是响应:

-1A4D3E35A859852802C3FC28D388D15A0
 内容类型:多部分/混合; 边界= 1A4D3E35A859852802C3FC28D388D15A1
 内容长度:1664

 --1A4D3E35A859852802C3FC28D388D15A1
 内容类型:application/http
 内容长度:687
 内容传输编码:二进制

 HTTP/1.1 201已创建
 内容类型:application/json
 内容长度:441
 位置: ...
 数据服务版本:2.0

 {" d":{...}}
 --1A4D3E35A859852802C3FC28D388D15A1
 内容类型:application/http
 内容长度:680
 内容传输编码:二进制

 HTTP/1.1 201已创建
 内容类型:application/json
 内容长度:435
 位置: ...
 数据服务版本:2.0

 {" d":{...}}
 --1A4D3E35A859852802C3FC28D388D15A1--

 --1A4D3E35A859852802C3FC28D388D15A0
 内容类型:application/http
 内容长度:900
 内容传输编码:二进制

 HTTP/1.1 400错误请求
 内容类型:application/json; charset = utf-8
 内容长度:780
 数据服务版本:1.0

 {"错误":{"代码":"/img/IWBEP/CM_MGW_RT/101","消息":{" lang":" de","值":" Datenobjekt
  \" ObjectOfServiceB \" nicht
 gefunden。"}," innererror":{" application":{" component_id":""," service_namespace":"/img/SAP/"," service_id":" ServiceB"," service_version":" 0001"},"  transactionid":" 025E6B2B00C80030E005B61A5CBF7889","时间戳":" 20180802102034.1571200"," Error_Resolution":{" SAP_Transaction":"运行
  SAP Gateway Hub系统上的事务/IWFND/ERROR_LOG并搜索
 带有时间戳的条目,以获取更多详细信息"," SAP_Note":"请参阅SAP
 注释1797736用于错误分析
 (https://service.sap.com/sap/support/notes/1797736)"},"errordetails":[{"code":"/img/IWBEP/CX_MGW_MED_EXCEPTION","message":"Datenobjekt
  \" ObjectOfServiceB \" nicht
 gefunden"," propertyref":"","严重性":"错误","目标":""}]}}}}
 --1A4D3E35A859852802C3FC28D388D15A0-

如您所见,在数据模型中找不到ObjectOfServiceB。 我实际上可以在代码中看到Netweaver Gateway Logik试图在服务A的模型中找到ObjectOfServiceB。

如果我颠倒了服务A上的POST请求和服务B上的GET的顺序,则错误会更改,从而找不到ObjectOfServiceA。

似乎,如果有一个包含的服务,则用于实例化包含数据模型的MGW运行时的代码只是针对批处理请求中首先出现的任何服务,而不是随后的任何服务。

有人对如何解决这个问题有想法吗?

关于丹尼尔

付费偷看设置
发送
1条回答
callcenter油条
1楼-- · 2020-09-15 04:33

似乎我们需要安德烈·费舍尔在这里(-)。

一周热门 更多>