Получение 400 неверных запросов с сервисом WCF, вызванным через WebRequest с использованием C # - PullRequest
1 голос
/ 29 марта 2011

После некоторых изменений в коде и прохождения множества ссылок я смог написать следующий код для вызова метода службы WCF с сообщением SOAP.Теперь я получаю ошибку 400 Bad Request, что бы я ни изменял (пробовал HttpWebRequest), я все еще получаю эту ошибку.Не уверен, что мне не хватает:

private string WebServiceCall()
{
    WebRequest req = WebRequest.Create("http://klo239fu.mass.win.tf.com/WCFTestService/Service.svc");
    req.ContentType = "application/soap+xml; charset=utf-8";
    req.Method = "POST";
    req.Headers.Add("SOAPAction", "http://tempuri.org/GetSimpleType");
    using(Stream reqStream = req.GetRequestStream())
    {
        var bytes = Encoding.UTF8.GetBytes(txtFormattedSoap.Text);
        reqStream.Write(bytes, 0, bytes.Length);
        reqStream.Close();
    }
    var wr = (WebRespose)req.GetResponse();
    var srd = new StreamReader(wr.GetResponseStream());
    txtResponse.Text = srd.ReadToEnd();
}

SOAP-запрос (от клиента SOAP)

POST /WCFTestService/Service.svc HTTP/1.1
Host: klo239fu.mass.win.tf.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "wsf-test-service/IService/GetSimpleType"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
 <GetSimpleType xmlns="wsf-test-service">
  <myvalue>int</myvalue>
 </GetSimpleType>
 </soap:Body>
</soap:Envelope>

Вот SOAP-запрос, который связан с указанным выше мыльным энвеопомкоторый я передаю в своем коде:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetSimpleType xmlns="wcf-test-service"><myvalue>1234</myvalue></GetSimpleType></soap:Body></soap:Envelope>

Раньше у меня был тип содержимого test / xml, но выброшен код "(415) Невозможно обработать сообщение, поскольку тип содержимого 'text / xml' не был ожидаемым типом.».Поэтому я изменил тип содержимого = "application / soap + xml; charset = utf-8", но он завершается неудачно с (400) неверным запросом.

1 Ответ

2 голосов
/ 05 апреля 2011

Я видел другой пост, который вы сделали, и я думаю, что вы и я сейчас работаем над тем же.Динамически вызывать веб-сервисы.Загрузка WSDL, использование динамических прокси-серверов и рефлексии, а также всего прочего.

У меня есть предложение по этой ошибке, которое вы видите.У меня была похожая проблема с одним из веб-сервисов, которые я использовал.Даже если предполагается, что действие в заголовке является необязательным, ему удалось прервать мой вызов, когда я передал адрес (uri), как вы.Когда я передал название операции вместо этого, она работала.Поэтому попробуйте изменить это:

req.Headers.Add("SOAPAction", "http://tempuri.org/GetSimpleType"); 

На имя метода в WSDL.Это имя System.ServiceModel.Description.OperationDescription.Это, вероятно, "GetSimpleType".

req.Headers.Add("SOAPAction", "GetSimpleType"); 
...