Member 10194820 Ответов: 4

отправить запрос soap c#


Всем привет,

Надеюсь, кто-нибудь сможет помочь. Я продолжаю получать "внутреннюю ошибку сервера 500" с этим кодом. Я начинаю сходить с ума.

Вот код:

public static void getAuthenticationToken()
{
  StringBuilder xml = new StringBuilder();
  xml.Append(@"<?xml version=""1.0"" encoding=""utf-8""?>");
  xml.Append(@"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" ");
  xml.Append(@"xmlns:ser=""http://www.UKMail.com/Services/Contracts/ServiceContracts"" ");
  xml.Append(@"xmlns:dat=""http://www.UKMail.com/Services/Contracts/DataContracts"">");
  xml.Append("<soapenv:Header/>");
  xml.Append("<soapenv:Body>");
  xml.Append("<ser:Login>");
  xml.Append("<ser:loginWebRequest>");
  xml.Append("<dat:Password>password</dat:Password>");
  xml.Append("<dat:Username>username</dat:Username>");
  xml.Append("</ser:loginWebRequest>");
  xml.Append("</ser:Login>");
  xml.Append("</soapenv:Body>");
  xml.Append("</soapenv:Envelope>");

  string s = getUKMailData(xml.ToString(), "https://qa-api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?wsdl");
}

public static void getUKMailData(string xml, string address)
{           
   string result = "";
   HttpWebRequest request = CreateWebRequest(address);
   XmlDocument soapEnvelopeXml = new XmlDocument();
   soapEnvelopeXml.LoadXml(xml);

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

   using (WebResponse response = request.GetResponse()) // Error occurs here
   {
      using (StreamReader rd = new StreamReader(response.GetResponseStream()))
      {
         string soapResult = rd.ReadToEnd();
         Console.WriteLine(soapResult);
      }
   }
}

public static HttpWebRequest CreateWebRequest(string url)
{
   HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
   webRequest.Headers.Add("SOAP:Action");
   webRequest.ContentType = "text/xml;charset=\"utf-8\"";
   webRequest.Accept = "text/xml"; 
   webRequest.Method = "POST";
   return webRequest;
}



Я новичок в SOAP и не знаю, как заставить его работать в .NET. Любая помощь будет оценена по достоинству.

Sergey Alexandrovich Kryukov

Вы думаете, что только начинаете? Хочешь поговорить об этом? :-)
—СА

4 Ответов

Рейтинг:
23

DamithSL

возможно, вы уже исправили проблему с запросом, но почему все эти работы? вы можете просто добавить ссылку на службу в свой проект, указав url-адрес WCF. затем он сгенерирует клиентский прокси-класс для сервиса. затем вы можете вызвать методы, как показано ниже

UKMAuthenticationServiceClient client = new UKMAuthenticationServiceClient();
var response  = client.Login(new LoginWebRequest() { Password = "??", Username = "??" });


Как добавить, обновить или удалить ссылку на службу[^]


Member 10194820

Это звучит гораздо лучше, я разберусь с этим, спасибо.

Рейтинг:
1

Sergey Alexandrovich Kryukov

Удивительно видеть, что вы пытаетесь вручную составить XML-текст, даже не используя ни один из типов XML, доступных в файле .NET. Почему бы не использовать типы .NET FCL, предназначенные для таких целей? Пожалуйста смотрите:
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.soap.soapformatter%28v=vs.110%29.aspx[^].

И я не знаю, развиваете ли вы также и саму службу. Если вы это сделаете, то было бы более уместно переопределить его, используя гораздо более высокие уровни абстракций, такие как контракт данных или сервисный контракт Это была бы совсем другая история. А пока я бы посоветовал прочитать, что предлагают вам стандартные библиотеки, начиная с .NET BCL.

—СА


Рейтинг:
1

Member 10194820

Проблема была в другом

webRequest.Headers.Add("SOAP:Action");


Я изменил его на:

webRequest.Headers.Add("SOAPAction", action);


действие = "http://www.UKMail.com/Services/IUKMAuthenticationService/Login";


Рейтинг:
0

Member 14073346

Привет!

У меня была такая же ошибка и я решил ее в методе "CreateWebRequest", бывает, что приходится добавлять другое свойство "webRequest".Заголовки["Авторизация"]"

public static HttpWebRequest CreateWebRequest(string url)
{
authinfo в =

"Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("username:password"));
&низкотемпературный;------
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Создать(url);
веб-запрос.Headers.Add("SOAPAction",
serviceUrl + @"/" + method
);
webRequest.Headers["Authorization"] = authInfo ;
&низкотемпературный;--------
веб-запрос.ContentType = "text/xml;charset="UTF-8"";
веб-запрос.Принимаем = "текст/XML";
веб-запрос.Метод = "сообщение";
вернуться в WebRequest;
}