通过服务层添加业务伙伴

2020-09-21 12:46发布

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

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


大家好,

我尝试通过服务层在SAP HANA后端上添加新的业务合作伙伴

我尝试同时使用.Net HttpClient和HttpWebRequest

使用HttpCliend我得到了堆栈跟踪的异常

发送请求时发生错误。
    在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
    在System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()处
    在System.Net.Http.HttpClient中。 d__58.MoveNext()

使用HttpWebRequest,我设法连接到服务层,但是在添加新的业务伙伴时,出现连接错误

 ----------------------连接响应----------------------
 {
    " odata.metadata":" https://192.168.1.185:50000/b1s/v1/$metadata#B1Sessions/@Element",
    " SessionId":" fbca8422-3730-11e8-8000-08002740a590",
    " Version":" 920180",
    " SessionTimeout":30
 }


 ----------------------添加业务伙伴----------------------
 远程服务器返回错误:(401)未经授权。

有人可以解释为什么我得到上述结果吗?

最诚挚的问候,

Dimitris Theotokatos

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

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


大家好,

我尝试通过服务层在SAP HANA后端上添加新的业务合作伙伴

我尝试同时使用.Net HttpClient和HttpWebRequest

使用HttpCliend我得到了堆栈跟踪的异常

发送请求时发生错误。
    在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
    在System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()处
    在System.Net.Http.HttpClient中。 d__58.MoveNext()

使用HttpWebRequest,我设法连接到服务层,但是在添加新的业务伙伴时,出现连接错误

 ----------------------连接响应----------------------
 {
    " odata.metadata":" https://192.168.1.185:50000/b1s/v1/$metadata#B1Sessions/@Element",
    " SessionId":" fbca8422-3730-11e8-8000-08002740a590",
    " Version":" 920180",
    " SessionTimeout":30
 }


 ----------------------添加业务伙伴----------------------
 远程服务器返回错误:(401)未经授权。

有人可以解释为什么我得到上述结果吗?

最诚挚的问候,

Dimitris Theotokatos

付费偷看设置
发送
5条回答
哎,真难
1楼 · 2020-09-21 13:32.采纳回答

你好拉尔夫,

感谢您的回复。

我设法使用RestSharp和

解决了自己的问题
 var _client = new RestClient(Url);
 var _request = new RestRequest(Method);

 _request.AddCookie(" B1SESSION"," VeryLongSessionID");
 _request.AddCookie(" ROUTEID"," HeaderRouteID"]);
 _request.AddHeader(" Content-type"," application/json");
 _request.AddParameter(" undefined",myJsonObject,ParameterType.RequestBody);
 IRestResponse _response = _client.Execute(_request);
 

只是把它留在这里,以防其他人遇到和我一样的问题。

最诚挚的问候,

Dimitris Theotokatos

d56caomao
2楼-- · 2020-09-21 13:30

你好Miklos,

感谢您的答复。

您能否提供一个示例,说明我的请求的标头到底是什么?

谢谢

Dimitris Theotokatos

xfwsx85
3楼-- · 2020-09-21 13:42

嗨,您应该像这样传递B1SESSION cookie

B1SESSION dfe00e3e-31d2-11e8-8000-000c297176d4

所有后续HTTP请求标头中的

。 我希望这有帮助。 米克洛斯

渐行渐远_HoldOn
4楼-- · 2020-09-21 13:37

嗨,

我没有检查您的代码,但是有一个关于如何在WCF中使用服务层的完整示例,我已经完成了另一个简单的代码,使使用纯.Net的SL请求对(请检查lib/ServiceLayer)

无论如何,这比B1特定的问题更多是.Net编码问题。

因此,比这里更适合StackOverflow(如何使用.net请求设置Cookie)。

欢呼

奄奄一息的小鱼
5楼-- · 2020-09-21 13:38

所以我听从了Miklos的建议,并向服务层发送了以下请求:

1)我添加了B1SESSION = 194903fc-3966-11e8-8000-08002740a590; ROUTEID = .node1作为我的请求的标题为" Cookie"的标题

这是我的请求的示例

 httpWebRequest.Headers.Add(" Cookie"," B1SESSION = 194903fc-3966-11e8-8000-08002740a590; ROUTEID = .node1");
 

我得到的回复是

远程服务器返回错误:(400)错误的请求。

2)我添加了B1SESSION = 194903fc-3966-11e8-8000-08002740a590; ROUTEID = .node1作为Cookie使用:

如果(httpWebRequest.CookieContainer == null)
 {
      httpWebRequest.CookieContainer = new CookieContainer();
 }
 Uri _target = new Uri(Url);

 httpWebRequest.CookieContainer.Add(new Cookie(" B1SESSION"," 194903fc-3966-11e8-8000-08002740a590"){域= _target.Host});
 httpWebRequest.CookieContainer.Add(new Cookie(" ROUTEID"," .node1"){域= _target.Host});
 

我得到的答复是

远程服务器返回错误:(400)错误的请求。

请注意,我将请求设置为

 var httpWebRequest =(HttpWebRequest)WebRequest.Create(Url);
 httpWebRequest.ContentType =" application/json";
 httpWebRequest.Method =" POST";
 httpWebRequest.ServerCertificateValidationCallback + =(发件人,证书,链,sslPolicyErrors)=> true;

 使用(var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
 {
       streamWriter.Write(_json);
       streamWriter.Flush();
       streamWriter.Close();
 }
 var httpResponse =(HttpWebResponse)httpWebRequest.GetResponse();
 

其中Url是我需要调用的服务层位置和实体,而_json是我需要发送的json对象

有人可以建议如何通过登录会话向服务层提出请求吗?

亲切的问候,

Dimitris Theotokatos

一周热门 更多>