Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.Net Core 2.0调用SOAP api时出错_C#_Asp.net Core_Soap_Asp.net Core 2.0 - Fatal编程技术网

C# 从.Net Core 2.0调用SOAP api时出错

C# 从.Net Core 2.0调用SOAP api时出错,c#,asp.net-core,soap,asp.net-core-2.0,C#,Asp.net Core,Soap,Asp.net Core 2.0,我们使用.NETCore2.0版本调用外部SOAP服务 相关调用方法为: public async void Login(/*string username, string password*/) { try { OBASEMDMClient client = new OBASEMDMClient(); var loginCredential = new LoginCredential { UserNameO

我们使用.NETCore2.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.svc. 这可能是由于服务端点绑定未使用HTTP协议造成的。 这也可能是由于服务器中止了HTTP请求上下文(可能是由于服务关闭)

但是当我们使用SOAPUI来校准服务时,我们得到了成功的响应:

SOAPUI请求:

这是相关服务的WSDL架构:


我们如何使用.Net Core 2.0调用此服务?

async void
在事件处理程序之外是fire and forget

参考文献

这可能就是上下文可能超出范围并中止的原因

应该重构该方法以返回
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;
    }
}
<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>
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");
}
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;
    }
}