我无法使用.NET框架连接SAP Business One Service Layer。它抛出错误:内部服务器错误,状态代码为500。
HttpClient client = new HttpClient();
string json = JsonConvert.SerializeObject(new {
CompanyDB = "company",
UserName = "username",
Password = "password"
}
);
var response = await client.PostAsync("service layer URL", new StringContent(json,
Encoding.Default, "application/json"));尽管我可以用相同的代码使用.NET核心应用程序连接到服务层。
我已经浏览了这个博客https://blogs.sap.com/2015/07/15/how-to-consume-service-layer-odata-services-from-net-via-wcf/
但是我无法为服务层添加服务引用。我不确定这个问题是属于服务层还是属于我的程序。我们是否需要编写额外的代码才能从OData框架调用.net服务(因为服务层是oData、V3或V4)?请帮我解决这个问题。
发布于 2021-10-11 13:57:21
关于您的登录问题,您可以截获从您的两个应用程序( HTTP与.NET核心)发送的HTTP消息,并对它们进行比较。例如通过使用Fiddler。您可能会发现一个阻止SL处理您的请求的小差异。
通过使用RestSharp库,我能够在.NET核心项目中成功地连接到SL。也许这会让你开始:
private static void Main(string[] args)
{
var client = new RestClient("https://<host>:<port>/b1s/v2");
client.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
{
// allow all certificates for testing purposes
return true;
};
var resolver = new CamelCasePropertyNamesContractResolver();
// respect the names defined in the JsonProperty annotations
resolver.NamingStrategy.OverrideSpecifiedNames = false;
client.UseNewtonsoftJson(new JsonSerializerSettings() { ContractResolver = resolver });
var loginRequest = new RestRequest("Login");
loginRequest.AddJsonBody(new LoginBody() { CompanyDB = "yourCompanyDb", UserName = "user1", Password = "myPassword" });
var response = client.Post<LoginResponse>(loginRequest);
if (response.Data != null)
{
var itemRequest = new RestRequest("Items('57387')"); // get an item
// add the session cookie
itemRequest.AddHeader("Cookie", $"B1SESSION={response.Data.SessionId}");
var itemResponse = client.Get<Items>(itemRequest);
}
}JSON POCOs:
public class LoginBody
{
[JsonProperty("CompanyDB")]
public string CompanyDB { get; set; }
[JsonProperty("Password")]
public string Password { get; set; }
[JsonProperty("UserName")]
public string UserName { get; set; }
}
public class LoginResponse
{
[JsonProperty("SessionId")]
public string SessionId { get; set; }
}
public class Items
{
[JsonProperty("ItemCode")]
public string ItemCode { get; set; }
[JsonProperty("ItemName")]
public string ItemName { get; set; }
}关于您提出的添加服务引用的问题,我不确定您想要实现什么。如果您希望生成一个包含所有必需的类和数据模型的OData客户端,那么您可能需要查看Unchase OData Connected Service Visual Studio扩展。对我来说,这工作得很好,因为它基于Microsoft.OData.Client.DataServiceContext类生成了一个正常工作的SL/OData客户机。有关如何使用它的更多示例,请参阅OData client documentation。
发布于 2022-02-17 19:10:01
我写了一个名为B1SLayer的库,旨在使用.NET简化服务层请求,请看一下:
https://github.com/bgmulinari/B1SLayer/
https://www.nuget.org/packages/B1SLayer/
只需创建您的SLConnection实例,会话就会被自动管理。请查看GitHub页面以获取请求样本。
var serviceLayer = new SLConnection("https://sapserver:50000/b1s/v1", "CompanyDB", "manager", "12345");https://stackoverflow.com/questions/69468528
复制相似问题