C# 嵌套的Try/Catch语句
我有一些使用Web服务的代码。与每次都从服务中检索会话密钥不同,我希望使用设置的会话变量尝试响应,如果出现403错误,则获取新会话密钥并重试 在我有限的头脑中,嵌套C# 嵌套的Try/Catch语句,c#,.net,exception,C#,.net,Exception,我有一些使用Web服务的代码。与每次都从服务中检索会话密钥不同,我希望使用设置的会话变量尝试响应,如果出现403错误,则获取新会话密钥并重试 在我有限的头脑中,嵌套try/catch语句是有意义的,但我已经意识到必须有更好的方法。我在这里读过几篇文章,提到了诸如使用语句的lambda表达式和助手,但这些也可能是外星行星际科学给我的礼物 始终愿意学习我想知道是否有人有建议(与细节或链接到细节)?这里的一切都正常,我只是需要一种比嵌套try语句更好的方法(请和谢谢)。和往常一样,你们摇滚 publi
try/catch
语句是有意义的,但我已经意识到必须有更好的方法。我在这里读过几篇文章,提到了诸如使用语句的lambda表达式
和助手
,但这些也可能是外星行星际科学给我的礼物
始终愿意学习我想知道是否有人有建议(与细节或链接到细节)?这里的一切都正常,我只是需要一种比嵌套try
语句更好的方法(请和谢谢)。和往常一样,你们摇滚
public string getMySessionkey
如果尚未设置会话密钥,则使用登录凭据转到服务器以获取会话密钥(所有其他查询都需要)
searchPacket=stringbuilder,带参数和会话密钥
if (Session["MySessionKey"] != null)
{
sessionKee = Session["MySessionKey"].ToString();
}
else
{
sessionKee = getMySessionkey(_cbE, _cbP);
System.Web.HttpContext.Current.Session.Add("MySessionKey", sessionKee);
}
try
{
mySearchResults = getResults(searchPacket.ToString());
vbResultz += Server.HtmlEncode(mySearchResults) ;
}
catch (WebException wx)
{
HttpWebResponse webresponse ;
webresponse = (HttpWebResponse)wx.Response;
switch (webresponse.StatusCode)
{
case HttpStatusCode.InternalServerError:
...
break;
case HttpStatusCode.Forbidden: // 403
vbResultz = "You aint got no valid session key!";
// code here to get a new session key and try again
break;
default:
throw;
}
}
使用发生次数有限的循环。一旦通话成功,就退出循环
var maxNumberOfTries = 3;
var currentTry = 0;
var success = false;
do
{
currentTry += 1;
// Try whatever here. If it works, set success variable to true
if (success) break;
} while (currentTry <= maxNumberOfTries)
if (!success)
{
// If code reaches here, whatever had to be done has been tried <maxNumberOfTries> times and did not work
}
var maxNumberOfTries=3;
var currentTry=0;
var成功=false;
做
{
currentTry+=1;
//试试这里的任何方法。如果有效,将success变量设置为true
如果(成功)失败;
}while(currentTry)很有魅力,thanx太多了。不过,我还是想了解lamba和helpers。@user116923我不太确定这对你解决这个特定问题有什么好处。
var maxNumberOfTries = 3;
var currentTry = 0;
var flag = false;
do
{
currentTry += 1;
try
{
mySearchResults = getResults(searchPacket.ToString());
vbResultz += Server.HtmlEncode(mySearchResults) ;
flag = true;
}
catch (WebException wx)
{
HttpWebResponse webresponse ;
webresponse = (HttpWebResponse)wx.Response;
switch (webresponse.StatusCode)
{
case HttpStatusCode.InternalServerError:
...
flag = true;
break;
case HttpStatusCode.Forbidden: // 403
vbResultz = "You aint got no valid session key!";
// code here to get a new session key and try again
break;
default:
throw;
}
}
if (flag) break;
} while (currentTry <= maxNumberOfTries)
if (!flag)
{
// If code reaches here, whatever had to be done has been tried <maxNumberOfTries> times and did not work
}