Не было конечной точки прослушивания ... которая могла бы принять сообщение - PullRequest
0 голосов
/ 30 марта 2020

Я создаю ASP. NET Базовый проект веб-API.

Служба запускается иногда, иногда происходит сбой.

Я получаю 90% успешных результатов.

Не было прослушивания конечной точки (URL), которая могла бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. См. InnerException, если имеется, для получения более подробной информации.

Привязка выглядит следующим образом

enter image description here

1 Ответ

0 голосов
/ 31 марта 2020

Сервис должен работать некорректно. По умолчанию при вызове, отправляемом прокси-сервером, преимущественно используется URI службы, сгенерированный в файле reference.cs.
enter image description here
Мы должны изменить его на практический URL-адрес службы.

https://vabqia96vm: 21011 /

Кроме того, служба связи с клиентом защищена защитой транспортного уровня. Мы должны доверять сертификату сервера перед отправкой вызова или добавить процедуру аутентификации SSL, чтобы игнорировать проверку сертификата сервера.

ServiceReference1.ServiceClient client = new ServiceClient();
//ignore the SSL authentication.            
client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication=new System.ServiceModel.Security.X509ServiceCertificateAuthentication()
            {
                CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None,
                RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck
            };
            var result = client.TestAsync();
            Console.WriteLine(result.Result);

Кроме того, мы могли бы позвонить в службу, используя ChannelFactory.

class Program
{
    static void Main(string[] args)
    {
        Uri uri = new Uri("https://vabqia969vm:21011");
        BasicHttpsBinding binding = new BasicHttpsBinding();
        binding.Security.Mode = BasicHttpsSecurityMode.Transport;
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
        ChannelFactory<IService> factory = new ChannelFactory<IService>(binding, new EndpointAddress(uri));
        factory.Credentials.ServiceCertificate.SslCertificateAuthentication=new System.ServiceModel.Security.X509ServiceCertificateAuthentication()
        {
            CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None,
            RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck
        };
        var client = factory.CreateChannel();
        var result = client.Test();
        Console.WriteLine(result);
    }


}
//the service contract is shared between the server-side and the client-side.
[ServiceContract]
public interface IService
{
    [OperationContract]
    string Test();
}

Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...