Клиент .NET, использующий веб-службу SSL AXIS 1.4, все исключения «ОШИБКА ВНУТРЕННЕГО СЕРВЕРА» - PullRequest
2 голосов
/ 07 октября 2011

Мне нужно использовать веб-сервис AXIS 1.4 через SSL от клиента .NET. В настоящее время мы реализуем System.Net.WebClient, мы вручную создаем запрос XML и загружаем его в веб-сервис. Это прекрасно работает для получения правильных результатов, однако, если возникает исключение (java.rmi.RemoteException), мы возвращаем только WebException «Interal Server Error». Проверка ответа не дает более подробной информации.

Если мы добавим службу в Visual Studio 2010 в качестве веб-ссылки .NET 2.0 (SoapHttpClientProtocol), мы получим требуемое исключение java.rmi.RemoteException со всеми необходимыми сведениями для устранения проблемы. Тем не менее, все полученные ответы от действительного запроса равны нулю.

Примечание. Эта служба успешно используется другими (конкурентами) .NET-клиентами (для которых у нас нет исходного кода).

Повторно: действительный запрос через WebClient получает действительные объекты ответа, но каждое исключение - «Внутренняя ошибка сервера», действительный запрос через веб-ссылку получает нулевые ответы, но точно отображает желаемое исключение java.rmi.RemoteException.

Цель: правильные ответы вместе с полными java.rmi.RemoteExceptions (не расплывчатыми внутренними ошибками сервера), даже если я получу исключение SoapException, которое будет огромным улучшением.

IDE: Visual Studio 2010 SP1

ОС: Windows 7

.NET: 2.0 / 3.5 / 4.0 (я пробовал все три версии с одинаковыми результатами)

Язык: C #

Пример кода веб-клиента:

var lvResult = "";

        try
        {
            var lvStr = "sample request";
            var client = new WebClient();
            client.Headers.Add("SOAPAction", "SampleRequest");

            lvResult = client.UploadString(cvURL, lvStr);
        }
        catch (Exception ex)
        {

        }

ОБНОВЛЕНИЕ: Если быть более точным, это не было бы проблемой, если бы генерировалось исключение Soap, однако единственное выбрасываемое исключение - это «WebException», которое, по-видимому, не дает мне доступ к строке ошибок. Ниже приведена неполадка с чистым мылом, которую я получаю от службы AXIS:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
<soapenv:Fault>
  <faultcode>soapenv:Server.userException</faultcode>
  <faultstring>java.rmi.RemoteException: Error in posting Request: Code 02 - No UserId for this user name/password.</faultstring>
  <detail>
    <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">xxxx</ns1:hostname>
  </detail>
</soapenv:Fault>

РЕШЕНИЕ: я нашел обходной путь, перехватив WebException и захватив поток ответов для ответа об исключении -

    catch(WebException pvEx)
    {
        var lvResponseString = "";

        if (pvEx.Response != null)
        {
            using (var lvStreamReader = new StreamReader(pvEx.Response.GetResponseStream()))
            {
                //This string now contains the xml soap response
                lvResponseString = lvStreamReader.ReadToEnd(); 
            }
        }

    }

1 Ответ

1 голос
/ 07 октября 2011

Это сообщение именно о вашей проблеме: http://bytes.com/topic/net/answers/427757-soap-faults.

Я думаю, что ваша служба AXIS возвращает SOAPFAULT.Вам просто нужно знать, как с этим справиться в вашем .NET-клиенте.И это описано в этом посте.

С уважением, Марко Кроунвейк

...