Как опубликовать SOAP-запрос от .NET?

У меня есть SOAP-запрос в XML-файле. Я хочу опубликовать запрос к веб-сервису в .net Как реализовать?

30
задан 25.11.2019, 22:05

6 ответов

Вот другой пример - этот в VB:

    Dim manualWebClient As New System.Net.WebClient()

    manualWebClient.Headers.Add("Content-Type", "application/soap+xml;  charset=utf-8")

    ' Note: don't put the <?xml... tag in--otherwise it will blow up with a 500 internal error message!
    Dim bytArguments As Byte() = System.Text.Encoding.ASCII.GetBytes( _
        "<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" & System.Environment.NewLine & _
        "  <soap12:Body>" & System.Environment.NewLine & _
        "    <Multiply xmlns=""http://cptr446.class/"">" & System.Environment.NewLine & _
        "      <x>5</x>" & System.Environment.NewLine & _
        "      <y>4</y>" & System.Environment.NewLine & _
        "    </Multiply>" & System.Environment.NewLine & _
        "  </soap12:Body>" & System.Environment.NewLine & _
        "</soap12:Envelope>")
    Dim bytRetData As Byte() = manualWebClient.UploadData("http://localhost/CPTR446.asmx", "POST", bytArguments)

    MessageBox.Show(System.Text.Encoding.ASCII.GetString(bytRetData))
2
ответ дан 25.11.2019, 22:06
  • 1
    вопрос, почему это необходимо? Этот ответ решает мою проблему, но меня don' t знают почему. – Ben 01.09.2016, 01:34

Я сделал что-то вроде этого, создав запрос xml вручную и затем с помощью объекта webrequest отправить запрос:

string data = "the xml document to submit";
string url = "the webservice url";
string response = "the response from the server";

// build request objects to pass the data/xml to the server
byte[] buffer = Encoding.ASCII.GetBytes(data);
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = buffer.Length;
Stream post = request.GetRequestStream();

// post data and close connection
post.Write(buffer, 0, buffer.Length);
post.Close();

// build response object
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream responsedata = response.GetResponseStream();
StreamReader responsereader = new StreamReader(responsedata);
response = responsereader.ReadToEnd();

строковые переменные в начале кода - то, что Вы устанавливаете, тогда Вы получаете строковый ответ (надо надеяться...) с сервера.

5
ответ дан 25.11.2019, 22:06
  • 1
    Может кто-то выручать меня с этот один. I' ve эта подобная проблема, но никакие решения, кажется, работают на меня – Pulak 31.05.2017, 03:33
  • 2
    Теперь я пробую тот же код u, отправил .but, я получил неподдерживаемый тип среды –  25.11.2019, 22:07
  • 3
    That' ll быть запросом. ContentType, необходимо попробовать ' text/xml' (я думаю) для стандартного веб-сервиса asp.net. – marcus.greasly 25.11.2019, 22:07
  • 4
    Вы получали эту работу от типа текста/содержания XML? – Charu 25.11.2019, 22:07
  • 5
    Его полученная работа для сервиса ASMX. Теперь я хочу, отправляют запрос SOAP на сервис WCF. Как реализовать это. –  25.11.2019, 22:08
  • 6
    Используя этот код (после того, как, исправляя ошибку приблизительно две переменные, названные " response") и изменение типа контента к " text/xml" работавший для меня. – dgundersen 25.11.2019, 22:08

Это не нормальный путь. Обычно Вы использовали бы WCF или более старую ссылку веб-сервиса стиля для генерации клиента прокси для Вас.

Однако то, что необходимо сделать обычно, является использованием HttpWebRequest, чтобы соединиться с URL и затем отправить XML в теле запроса.

3
ответ дан 25.11.2019, 22:07
  • 1
    Этот ответ заслуживает большего количества голосов. Я ВСЕГДА забываю это. – Can Poyrazoğlu 03.06.2016, 13:46

Необходимо отправить данные по HTTP. Используйте класс WebRequest для регистрации данных. Необходимо будет отправить другие данные с запросом сообщения, чтобы гарантировать, чтобы у Вас был допустимый конверт SOAP. Читайте спецификация SOAP для всех деталей.

0
ответ дан 25.11.2019, 22:07
  • 1
    Можно также установить это через XML: app:layoutManager =" androidx.recyclerview.widget. LinearLayoutManager" – Westy92 09.08.2018, 19:28
  • 2
    lol, " Считайте мыло spec"... несколько лет спустя он возвращается с бородой и вставляется в умственное убежище. – duckworth 25.11.2019, 22:08
  • 3
    Спецификация SOAP относительно проста, it' s WS - безотносительно спецификаций, которые сосут больше всего. – Brian Lyttle 25.11.2019, 22:08
var uri = new Uri("http://localhost/SOAP/SOAPSMS.asmx/add");

var req = (HttpWebRequest) WebRequest.CreateDefault(uri); 
req.ContentType = "text/xml; charset=utf-8"; 
req.Method = "POST"; 
req.Accept = "text/xml"; 
req.Headers.Add("SOAPAction", "http://localhost/SOAP/SOAPSMS.asmx/add"); 

var strSoapMessage = @"<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' 
               xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
               xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
  <soap:Body><add xmlns='http://tempuri.org/'><a>23</a><b>5</b></soap:Body>
</soap:Envelope>"; 

using (var stream = new StreamWriter(req.GetRequestStream(), Encoding.UTF8)) 
    stream.Write(strSoapMessage); 
19
ответ дан 25.11.2019, 22:08
  • 1
    У меня был свой RecyclerView в ConstraintLayout, таким образом, это не называло методов адаптера. Сумасшедший: x – Saraz 19.10.2016, 17:50
  • 2
    Привет, что, если у меня нет значения ДЕЙСТВИЯ SOAP в моем xml –  25.11.2019, 22:09

Я задаюсь вопросом, как XML сгенерирован, и действительно ли это - действительное сообщение SOAP? Можно отправить его через HTTP, как предложили люди выше.

, Если Вы хотите протестировать, если это собирается работать, можно дать SoapUI попытка (для тестирования, которое я имею в виду).

2
ответ дан 25.11.2019, 22:09
  • 1
    То же здесь, я забываю это все время, и затем я ищу то, что я couldve, сделанный неправильно и затем, я заканчиваю здесь lol. – Ruben2112 12.07.2016, 17:08

Теги

Похожие вопросы