Ошибка вызова API SOAP из. Net Core 2.0 - PullRequest
1 голос
/ 10 января 2020

Мы используем версию Net Core 2.0 для вызова внешней службы SOAP.

Связанный метод вызова:

public async void Login(/*string username, string password*/)
{
    try
    {
        OBASEMDMClient client = new OBASEMDMClient();
        var loginCredential = new LoginCredential
        {
            UserNameOrEMail = "username",
            Password = "password"
        };
        var response = await client.LoginAsync(loginCredential);
    }
    catch (Exception e )
    {
        throw e;
    }
}

ответ, который мы получаем:

Произошла ошибка при получении ответа HTTP на http: /// OBASEMDM. св c. Это может быть связано с тем, что привязка конечной точки службы не использует протокол HTTP. Это также может быть связано с тем, что сервер прерывает контекст HTTP-запроса (возможно, из-за остановки службы).

Но когда мы используем SOAPUI для вызова службы, мы получаем ответ об успешном выполнении:

Запрос SOAPUI:

soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:obas="http://schemas.datacontract.org/2004/07/OBase.MDM.Entity">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:Login>
         <tem:credential>
            <obas:Password>password</obas:Password>
            <obas:UserNameOrEMail>userame</obas:UserNameOrEMail>
         </tem:credential>
      </tem:Login>
   </soapenv:Body>
</soapenv:Envelope>

Ответ SOAPUI:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <LoginResponse xmlns="http://tempuri.org/">
         <LoginResult xmlns:a="http://schemas.datacontract.org/2004/07/OBase.MDM.Entity" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Data i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">session-token</a:Data>
            <a:Message>İşlem başarı ile tamamlandı.
Login: 0,0069797Persistent login has been used</a:Message>
            <a:Result>true</a:Result>
            <a:ResultCode>300</a:ResultCode>
         </LoginResult>
      </LoginResponse>
   </s:Body>
</s:Envelope>

Согласно некоторым вопросам и ответам на SO, мы попытался реализовать частичный ConfigureEndpoint метод, созданный WCF, следующим образом. По-прежнему получайте ту же ошибку.

static void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials)
{
    serviceEndpoint.Binding = new BasicHttpBinding();
    serviceEndpoint.Binding.Name = "BasicHttpBinding_IOBASEMDM";
    serviceEndpoint.Address = new EndpointAddress("http://<address>/OBASEMDM.svc");
}

Это схема WSDL связанной службы: http://213.14.68.91: 83 / OBASEMDM.sv c? WSDL

Как мы можем вызвать эту услугу, используя. Net Core 2.0?

1 Ответ

1 голос
/ 12 января 2020

async void вне обработчика событий запускается и забывается

Ссылка Асинхронное / ожидание - лучшие практики асинхронного программирования

, вероятно, поэтому контекст может вышли из области видимости и прервались

Метод должен быть реорганизован для возврата Task

public async Task LoginAsync(string username, string password) {
    try {
        OBASEMDMClient client = new OBASEMDMClient();
        var loginCredential = new LoginCredential {
            UserNameOrEMail = username,
            Password = password
        };

        var response = await client.LoginAsync(loginCredential);

        //...
    } catch (Exception e ) {
        throw e;
    }
}
...