创建一个提供 asmx 服务(SOAP API)的 Web 客户端

问题描述 投票:0回答:0

我需要提供来自其他网页的第三方 asmx 服务中公开的数据,以便在我自己的 API 上使用它。我使用 NET 7.0 创建 API。要访问这个asmx服务的URL,需要先在网站登录(User,Password),然后是4个参数(Proportioned->obj,lang,user和password)访问方法。预期的响应必须是 JSON 响应,才能附加并映射它。 SOAP 客户端实际上已实现,但由于未添加登录,它会给出错误响应,因为我不知道具体是如何实现的。代码方案为:

客户类

public class Repository : IRepository
    {
        private readonly IConfiguration _configuration;
        public readonly string serviceUrl = Constants;
        public readonly EndpointAddress endpointAddress;
        public readonly BasicHttpBinding basicHttpBinding;
                
        public Repository(IConfiguration configuration)
        {
            _configuration = configuration;
            endpointAddress = new EndpointAddress(serviceUrl);
            basicHttpBinding = new BasicHttpBinding(endpointAddress.Uri.Scheme.ToLower() == "http" ? BasicHttpSecurityMode.None : BasicHttpSecurityMode.Transport);
            basicHttpBinding.OpenTimeout = TimeSpan.MaxValue;
            basicHttpBinding.CloseTimeout = TimeSpan.MaxValue;
            basicHttpBinding.ReceiveTimeout = TimeSpan.MaxValue;
            basicHttpBinding.SendTimeout = TimeSpan.MaxValue;
        }

        public async Task<json_ws_biisSoapClient> GetInstanceAsync()
        {
            return await Task.Run(() => new json_ws_biisSoapClient(basicHttpBinding, endpointAddress));
        }

        public async Task<Response<string>> BIISAsync(string obj, string lang, string user, string password)
        {
            Response<string> response = new Response<string>();           
            try
            {
                //Login method should go here (?)

                //ASMX service method that serves API SOAP
                var client = await GetInstanceAsync();
                await client.BIISAsync(obj, lang, user, password);

                DataTable dt = new DataTable();
                dt = JsonConvert.DeserializeObject<DataTable>("");

                response.Data = dt.ToString();
                response.code = 0;
            }
            catch (Exception ex)
            {
                response.code = 500;
                response.message = ex.Message;
            }
            return response;
        }
    } 

客户端界面

public interface IRepository
    {
        Task<json_ws_biisSoapClient> GetInstanceAsync();
        Task<Response<string>> BIISAsync(string obj, string lang, string user, string password);
    }

我正在考虑创建 2 个独立的客户端,但这是多余的,我需要帮助来实现这个。 任何建议将不胜感激。

SOAP 客户端在执行后,给出一个不太清晰的 html 响应,但有意义的是不起作用,因为它没有任何登录实现。邮递员也一样。

c# .net-core soap webclient soap-client
© www.soinside.com 2019 - 2024. All rights reserved.