C# 抓取java webservice 抛出的异常 问题

testuid 2013-03-04 05:52:38


最近在做一个项目 用的 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的时候把具体异常给抓出来
...全文
245 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
testuid 2013-04-06
  • 打赏
  • 举报
回复
谢谢各位 已经解决了 这个异常抛出需要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; //} 具体自己去取的
testuid 2013-03-05
  • 打赏
  • 举报
回复
引用 7 楼 devmiao 的回复:
引用 2 楼 testuid 的回复:引用 1 楼 devmiao 的回复:要在java那里想办法,当错误的时候返回错误的具体信息。如果java那里的程序没有异常处理,只是web server返回一个500的状态码,是没有办法知道具体错误的。 先发生异常,然后再抛出,然后再出现500页面,这个异常信息抛哪去了·· 没有了,给web server吃掉了。 ……
我也看了下 WebException 发现里面有个 InnerException 的属性 在MSDN上的解释是:一个 Exception 实例,它描述导致当前异常的错误。InnerException 属性返回与传递给构造函数的值相同的值,或者,如果没有向构造函数提供内部异常值,则返回空引用(Visual Basic 中为 Nothing)。此属性为只读。 应该是web service 把异常吃掉了 没有抛出来或者 其他情况 没有把定义的异常给赋给InnerException 博客园高手解释: InnerException属性使得Exception像俄罗斯套娃,一层套一层 某个地方捕捉了一个异常,然后抛出自己定义的异常,为了不让原来的异常丢失,可以将原来的异常作为新异常的 InnerException,这样可以一层套一层 看来还得webservice 那边做文章 我们这边是无能无力了
devmiao 2013-03-05
  • 打赏
  • 举报
回复
所谓InnerException也是指,服务器返回了这样的异常信息,客户端的代理把它包装成一个InnerException对象放在Exception中给你。显然客户端和服务器端并不共享内存和机器状态,也不共享堆栈,或者可以连为一体,客户端只能得到服务器主动提供(经网络传输)的数据。
devmiao 2013-03-05
  • 打赏
  • 举报
回复
引用 8 楼 testuid 的回复:
引用 7 楼 devmiao 的回复:引用 2 楼 testuid 的回复:引用 1 楼 devmiao 的回复:要在java那里想办法,当错误的时候返回错误的具体信息。如果java那里的程序没有异常处理,只是web server返回一个500的状态码,是没有办法知道具体错误的。 先发生异常,然后再抛出,然后再出现500页面,这个异常信息抛哪去了·· 没有了,给w……
反正客户端和服务器端通过http协议通讯,它所能知道的一切信息取决于服务器发给了它什么信息,你用一个抓包工具就能看到。
devmiao 2013-03-04
  • 打赏
  • 举报
回复
引用 2 楼 testuid 的回复:
引用 1 楼 devmiao 的回复:要在java那里想办法,当错误的时候返回错误的具体信息。如果java那里的程序没有异常处理,只是web server返回一个500的状态码,是没有办法知道具体错误的。 先发生异常,然后再抛出,然后再出现500页面,这个异常信息抛哪去了··
没有了,给web server吃掉了。
whm412 2013-03-04
  • 打赏
  • 举报
回复
HttpWebResponse res = (HttpWebResponse)webrequest.GetResponse(); if (res.StatusCode.ToString() == "500") { Console.WriteLine("等效于 HTTP 状态 500。System.Net.HttpStatusCode.InternalServerError 指示服务器上发生了一般错误。"); } 使用这个HttpStatusCode对象可判断出返回的状态为500,可做些处理。 但这是治标不治本的方法,还要是看看java那边出了什么异常。
EnForGrass 2013-03-04
  • 打赏
  • 举报
回复
引用 3 楼 Chinajiyong 的回复:
引用 楼主 testuid 的回复:最近在做一个项目 用的 C# 调用java的webservice 因为常常C#调的时候返回500 我们这边的人就想知道到底java那边到底是抛出啥子异常出来 在哪抛的。 目前: 在java webservice报500 或者505 的时候 知道到底具体异常是什么 下面是我调用java webservice的方法……
向调用服务这些,记录日志是很重要的,有时候找一个问题找死人,就是因为没记录日志,有时候查看日志问题就迎刃而解
江湖评谈 2013-03-04
  • 打赏
  • 举报
回复
用 webbroser 试试看?
EnForGrass 2013-03-04
  • 打赏
  • 举报
回复
引用 楼主 testuid 的回复:
最近在做一个项目 用的 C# 调用java的webservice 因为常常C#调的时候返回500 我们这边的人就想知道到底java那边到底是抛出啥子异常出来 在哪抛的。 目前: 在java webservice报500 或者505 的时候 知道到底具体异常是什么 下面是我调用java webservice的方法 请各位大牛·帮忙解答· C# code?123……
Java那边把具体异常抛给你或者记录日志,方便查看
testuid 2013-03-04
  • 打赏
  • 举报
回复
引用 1 楼 devmiao 的回复:
要在java那里想办法,当错误的时候返回错误的具体信息。如果java那里的程序没有异常处理,只是web server返回一个500的状态码,是没有办法知道具体错误的。
先发生异常,然后再抛出,然后再出现500页面,这个异常信息抛哪去了··
devmiao 2013-03-04
  • 打赏
  • 举报
回复
要在java那里想办法,当错误的时候返回错误的具体信息。如果java那里的程序没有异常处理,只是web server返回一个500的状态码,是没有办法知道具体错误的。

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧