.NET客户端使用AXIS 1.4 SSL Web服务所有异常“内部服务器错误”

时间:2011-10-06 20:20:11

标签: .net wcf web-services ssl axis

我需要从.NET客户端通过SSL使用AXIS 1.4 Web服务。目前我们实现了System.Net.WebClient,我们手工创建XML请求并将其上传到Web服务。这对于获取有效结果非常有用,但是如果发生异常(java.rmi.RemoteException),我们只会返回“Interal Server Error”的WebException。检查响应不会产生更多细节。

如果我们将Visual Studio 2010中的服务添加为.NET 2.0 Web引用(SoapHttpClientProtocol),我们会收到所需的java.rmi.RemoteException以及纠正问题的所有必要细节。但是,来自有效请求的所有结果响应都为空。

注意:其他(竞争对手的).NET客户端(我们没有源代码)会成功使用此服务。

重申:通过WebClient的有效请求会收到有效的响应对象,但每个异常都是“内部服务器错误”,通过Web Reference的有效请求会收到空响应,但会准确显示所需的java.rmi.RemoteException。

目标:有效响应以及完整的java.rmi.RemoteExceptions(不是模糊的内部服务器错误),即使我可以抛出SoapException,这将是一个巨大的改进。

IDE:Visual Studio 2010 SP1

操作系统:Windows 7

.NET:2.0 / 3.5 / 4.0(我尝试了所有三个版本具有相同的结果)

语言:C#

示例WebClient代码:

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”,它似乎不能让我访问faultstring。以下是我从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 个答案:

答案 0 :(得分:1)

这是一篇关于您遇到的问题的帖子:http://bytes.com/topic/net/answers/427757-soap-faults

我认为您的AXIS服务正在返回SOAPFAULT。您只需要知道如何在.NET客户端中处理它。这篇文章对此进行了描述。

祝你好运, Marco Kroonwijk