最近在做一个项目  用的 C# 调用java的webservice  因为常常C#调的时候返回500 我们这边的人就想知道到底java那边到底是抛出啥子异常出来  在哪抛的。目前: 在java webservice报500 或者505 的时候 知道到底具体异常是什么下面是我调用java webservice的方法  请各位大牛·帮忙解答· 
    Encoding encoding = Encoding.GetEncoding("utf-8");
                byte[] data = encoding.GetBytes(xml);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                //发送数据
                request.Method = "POST";
                request.ContentType = "application/soap+xml; charset=UTF-8";
                request.ContentLength = data.Length;
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(data, 0, data.Length);
                requestStream.Close();
                //接收返回值
                HttpWebResponse res = (HttpWebResponse)request.GetResponse();
                StreamReader sReader = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8);
                string returnXml = sReader.ReadToEnd();
                sReader.Close();
                res.Close();
                info.RESULT_TYPE = true;
                info.RESULT_DATA = returnXml;
                return info;
            }
            catch (HttpListenerException ex)
            {
                info.RESULT_DATA = ex.Message;
                return info;
            }
            catch (WebException ex)
            {
                info.RESULT_DATA = ex.Message;
                return info;
            }帮忙改改  。能不能再报500错或者505的时候把具体异常给抓出来c#java

解决方案 »

  1.   

    要在java那里想办法,当错误的时候返回错误的具体信息。如果java那里的程序没有异常处理,只是web server返回一个500的状态码,是没有办法知道具体错误的。
      

  2.   

    Java那边把具体异常抛给你或者记录日志,方便查看
      

  3.   

         用 webbroser 试试看?
      

  4.   

    HttpWebResponse res = (HttpWebResponse)webrequest.GetResponse();
                if (res.StatusCode.ToString() == "500")
                {
                    Console.WriteLine("等效于 HTTP 状态 500。System.Net.HttpStatusCode.InternalServerError 指示服务器上发生了一般错误。");
                }使用这个HttpStatusCode对象可判断出返回的状态为500,可做些处理。
    但这是治标不治本的方法,还要是看看java那边出了什么异常。
      

  5.   

    没有了,给web server吃掉了。
      

  6.   


    我也看了下  WebException  发现里面有个 InnerException 的属性
    在MSDN上的解释是:一个 Exception 实例,它描述导致当前异常的错误。InnerException 属性返回与传递给构造函数的值相同的值,或者,如果没有向构造函数提供内部异常值,则返回空引用(Visual Basic 中为 Nothing)。此属性为只读。 应该是web service 把异常吃掉了 没有抛出来或者 其他情况 没有把定义的异常给赋给InnerException 博客园高手解释:InnerException属性使得Exception像俄罗斯套娃,一层套一层 某个地方捕捉了一个异常,然后抛出自己定义的异常,为了不让原来的异常丢失,可以将原来的异常作为新异常的 InnerException,这样可以一层套一层看来还得webservice 那边做文章 我们这边是无能无力了
      

  7.   


    反正客户端和服务器端通过http协议通讯,它所能知道的一切信息取决于服务器发给了它什么信息,你用一个抓包工具就能看到。
      

  8.   

    所谓InnerException也是指,服务器返回了这样的异常信息,客户端的代理把它包装成一个InnerException对象放在Exception中给你。显然客户端和服务器端并不共享内存和机器状态,也不共享堆栈,或者可以连为一体,客户端只能得到服务器主动提供(经网络传输)的数据。
      

  9.   

    谢谢各位 已经解决了  这个异常抛出需要JAVA做处理 然后 
    C#这边在EXCEPTION里面去抓 具体代码如下//Stream sm = ((HttpWebResponse)ex.Response).GetResponseStream();
                    //if (sm.Length > 0)
                    //{
                    //    XmlDocument rxml = new XmlDocument();
                    //    rxml.Load(sm);
                    //    XmlNodeList nodelist = rxml.GetElementsByTagName("cordys:MessageCode");
                    //    XmlNodeList atlist = rxml.GetElementsByTagName("faultstring");
                    //    string errkey = nodelist[0].InnerText;
                    //    string errvalue = atlist[0].InnerText;
                    //    string err = errkey + " @ " + errvalue;
                    //    errinfo = err;
                    //}
    具体自己去取的