SOAP-запрос работает в NodeJS, но не в .NET - PullRequest
0 голосов
/ 10 октября 2018

У меня есть два набора кода ниже, где мы выполняем почтовый запрос.Узлу J удалось установить соединение, тогда как код .NET не может даже открыть поток.Не могли бы вы указать мне, что не так с кодом .NET?

NodeJS

    var fs = require('fs');
var https = require('https');

var post_data = fs.readFileSync('query.xml', 'utf-8');

var post_options = {
    hostname: 'test.something.org',
    port: 4437,
    path: '/Gateway/PatientDiscovery/',
    method: 'POST',
    key: fs.readFileSync('keyonly.pem'),
    cert: fs.readFileSync('certonly.crt'),
    ca: fs.readFileSync('crtchain2018.pem'),
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': Buffer.byteLength(post_data)
    }
};

// Set up the request
var post_req = https.request(post_options, function (res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log('Response: ' + chunk);
    });
});

try
{
// post the data
post_req.write(post_data);
post_req.end();
} catch(ex)
{
        console.log('Error' + ex);
}

Вот аналогичный код .NET, который всегда вызывает исключение

try
        {
            string endPoint = @"https://test.something.org:4437/Gateway/PatientDiscovery/;
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(endPoint);
            webRequest.Headers.Add(@"SOAP:Action");
            webRequest.ContentType = "application/x-www-form-urlencoded;charset=\"utf-8\"";
            webRequest.Method = "POST";
            return webRequest;

            request.ClientCertificates.Add(GetCert("keyonly.pem"));
            request.ClientCertificates.Add(GetCert("certonly.crt"));
            request.ClientCertificates.Add(GetCert("crtchain2018.pem"));

            XmlDocument soapEnvelopeXml = new XmlDocument();
            soapEnvelopeXml.LoadXml(GetXml());// query.xml
            ServicePointManager.CheckCertificateRevocationList = false;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
            ServicePointManager.ServerCertificateValidationCallback += AcceptCerts;


            using (Stream stream = request.GetRequestStream())
            {
                soapEnvelopeXml.Save(stream);
            }


            using (WebResponse response = request.GetResponse())
            {
                using (StreamReader rd = new StreamReader(response.GetResponseStream()))
                {
                    string soapResult = rd.ReadToEnd();
                    Console.WriteLine(soapResult);
                }
            }
        } catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

Подскажите, пожалуйста, что не так в коде .NET?

Спасибо, Шанкара

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...