jltik Ответов: 0

Базовая аутентификация по вопросу soap-сервиса


/**************************************Попытка WebClient*********************/
public static void CallWithWebClient()
    {
        Uri baseUri = new Uri(@"https://qapartsb2bwsx.rd.cat.com/psb2b/ReceiveDocumentServlet/xCBL30");
        string username = "A1rypsipc";
        string password = "catparts#1";
        var client = new System.Net.WebClient { Credentials = new NetworkCredential("username", "password") };

        XmlDocument soapEnvelopeXml = new XmlDocument();
        soapEnvelopeXml.Load("Caterpillar.xml");
        client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        string text = soapEnvelopeXml.InnerXml;
        string response =
            client.UploadString(baseUri, text);


    }


/***********************HttpWebRequestAttempt******************************/
public static void CallWithWebrequest()
   {
       Uri baseUri = new Uri(@"https://qapartsb2bwsx.rd.cat.com/psb2b/ReceiveDocumentServlet/xCBL30");
       string username = "A1rypsipc";
       string password = "catparts#1";
       WebRequest rqst = WebRequest.Create(baseUri);
       string authInfo = username + ":" + password;
       authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
       rqst.Headers.Add("Authorization", "Basic " +  authInfo);
       rqst.ContentType = "application/xhtml+xml";
       NetworkCredential cred = new NetworkCredential(username, password);
       rqst.Credentials = cred;
       rqst.PreAuthenticate = true;
       rqst.Method = "POST";
       XmlDocument soapEnvelopeXml = new XmlDocument();
       XmlTextReader rdr = new XmlTextReader("Caterpillar.xml");
       soapEnvelopeXml.Load("Caterpillar.xml");

       byte[] byteArray = Encoding.UTF8.GetBytes(soapEnvelopeXml.InnerXml);

       rqst.ContentLength = byteArray.Length;
       Stream dataStream = rqst.GetRequestStream();
       dataStream.Write(byteArray, 0, byteArray.Length);
       dataStream.Close();
       WebResponse response = rqst.GetResponse();
       dataStream = response.GetResponseStream();
       StreamReader reader = new StreamReader(dataStream);



       Stream data = rqst.GetRequestStream();
       soapEnvelopeXml.Save(data);
       dataStream.Close();
       using (WebResponse res = rqst.GetResponse())
       {
           using (StreamReader rd = new StreamReader(res.GetResponseStream()))
           {
               string soapResult = rd.ReadToEnd();
               Console.WriteLine(soapResult);
           }
       }


Что я уже пробовал:

Я пробовал много разных предложений на форумах повсюду, но безуспешно. Большинство из них практически идентичны. Httpwebrequest использует networkCredential для предоставления userid и pwd, затем я могу отправить xml через поток запросов, но он каждый раз не проходит проверку подлинности. Он считает, что userid и pwd равны нулю. WebClient фактически проходит аутентификацию (я предполагаю, потому что он проходит эту часть достаточно долго, чтобы сказать мне, что у него нет прикрепленного XML-документа).

Если кто-нибудь поможет мне понять, что я делаю не так, я буду очень благодарен.

0 Ответов