我正在使用Web服务获取长数组中的一些结果,如下所示:
try
{
System.Threading.ThreadPool.QueueUserWorkItem((o) =>
{
byte[] result = (new MagfaGetMessages()).getMessages(false,SMSUseProxy,SMSProxyAddress,SMSProxyUserName,SMSProxyPassword,1000);
});
}
}
catch
{
SMSwebServiceFailed = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ff");
}
// GetMessage Class
public MAGFAWebService.DatedCustomerReturnIncomingFormat[] getMessages(Boolean useProxy, String proxyAddress, String proxyUsername, String proxyPassword, String username, String password, String domain, int numberOfMessages)
{
lock (MagfaLock)
{
MAGFAWebService.SoapSmsQueuableImplementationService sq = new MAGFAWebService.SoapSmsQueuableImplementationService();
if (useProxy)
{
WebProxy proxy;
proxy = new WebProxy(proxyAddress);
proxy.Credentials = new NetworkCredential(proxyUsername, proxyPassword);
sq.Proxy = proxy;
}
sq.Credentials = new System.Net.NetworkCredential(username, password);
sq.PreAuthenticate = true;
return (MAGFAWebService.DatedCustomerReturnIncomingFormat[])sq.getMessages(domain, numberOfMessages);
}
}
但有时我会收到此错误:
The request failed with HTTP status 504: Gateway Time-out.
我在我的代码中使用了try {} catch,我想知道为什么会出现错误以及为什么它会被捕获?
错误将在此行中出现:
MAGFAWebService.DatedCustomerReturnIncomingFormat[])sq.getMessages(domain, numberOfMessages
感谢任何帮助。
答案 0 :(得分:0)
504:网关超时意味着您可以连接到主机,但由于某种原因连接已超时。原因可能是由于主机本身,其代理,DNS设置或连接问题的问题。在Difference between operation has time out and (504) Gateway Timeout
中存在类似的问题答案 1 :(得分:0)
示例中的try / catch捕获在调用ThreadPool.QueueUserWorkItem
期间发生的异常,而不是其他内容。人们可以期待像" null作为排队项目"或假设"池中没有足够的空间",但计划操作抛出的异常不会出现在该try / catch块中。
其中一个原因是在try / catch块完成后,操作甚至可能无法启动。
修复 - 尝试/捕获异步操作本身。
或者 - 使用新的async
/ await
,允许您编写看起来同步的异步代码:
try {
var message = await GetMessagesAsync();
}
catch (Exception ex) {
LogException(ex);
}
async Task<IEnumerable<Message>> GetMessagesAsync() {....}