最近在做一个项目 用的 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
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
if (res.StatusCode.ToString() == "500")
{
Console.WriteLine("等效于 HTTP 状态 500。System.Net.HttpStatusCode.InternalServerError 指示服务器上发生了一般错误。");
}使用这个HttpStatusCode对象可判断出返回的状态为500,可做些处理。
但这是治标不治本的方法,还要是看看java那边出了什么异常。
我也看了下 WebException 发现里面有个 InnerException 的属性
在MSDN上的解释是:一个 Exception 实例,它描述导致当前异常的错误。InnerException 属性返回与传递给构造函数的值相同的值,或者,如果没有向构造函数提供内部异常值,则返回空引用(Visual Basic 中为 Nothing)。此属性为只读。 应该是web service 把异常吃掉了 没有抛出来或者 其他情况 没有把定义的异常给赋给InnerException 博客园高手解释:InnerException属性使得Exception像俄罗斯套娃,一层套一层 某个地方捕捉了一个异常,然后抛出自己定义的异常,为了不让原来的异常丢失,可以将原来的异常作为新异常的 InnerException,这样可以一层套一层看来还得webservice 那边做文章 我们这边是无能无力了
反正客户端和服务器端通过http协议通讯,它所能知道的一切信息取决于服务器发给了它什么信息,你用一个抓包工具就能看到。
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;
//}
具体自己去取的