这段代码对我来说看起来不错,我想在使用语句里面使用return语句没错,但是编译器说并不是所有的代码路径都返回值。我应该如何解决这个问题才能返回字符串结果?返回语句里面使用statemtn导致错误“不是所有的代码路径返回值”
public static string CallWebService(string an, string xmlcommand)
{
//test
//Dim _url = "http://testapi.interface-xml.com/appservices/ws/FrontendService"
//live
dynamic _url = "http://212.170.239.18/appservices/ws/FrontendService";
try
{
string soapResult = null;
XmlDocument soapEnvelopeXml = CreateSoapEnvelope(xmlcommand);
HttpWebRequest webRequest = CreateWebRequest(_url, an);
webRequest.Headers.Add("Accept-Encoding", "gzip, deflate");
InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest);
IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);
asyncResult.AsyncWaitHandle.WaitOne();
using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
{
using (BufferedStream bs = new BufferedStream(webResponse.GetResponseStream()))
{
using (GZipStream gz = new GZipStream(bs, CompressionMode.Decompress))
{
using (StreamReader rd = new StreamReader(gz))
{
if (an == "HotelValuedAvailRQ")
{
soapResult = rd.ReadLine();
}
else
{
soapResult = rd.ReadToEnd();
}
return soapResult; //This is what I want to return
}
}
}
}
}
catch (TimeoutException ex)
{
StringBuilder s = new StringBuilder(2000);
s.AppendFormat("<b>К сожалению превышено время ожидания.</b>: {0} <br /><b>Источник</b>: {1}<br /><a href='javascript:history.back();'>Вернуться</a>", ex.Message, ex.InnerException);
HttpContext.Current.Session["bug"] = s.ToString();
HttpContext.Current.Response.Redirect("../errors/error.aspx");
}
}
错误是不言自明的。如果代码抛出错误,它可能不会返回到return语句,因此不会返回任何内容。将return语句移到catch块之后。 – Tim 2014-10-31 06:52:58
备注 - 通过简单陈述'using'语句并在最后一个之后打开括号,可以避免繁重的嵌套。 – 2014-10-31 06:55:36