Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web服务调用中的随机异常_C#_Rest_Web Services - Fatal编程技术网

C# Web服务调用中的随机异常

C# Web服务调用中的随机异常,c#,rest,web-services,C#,Rest,Web Services,我有一个在生产环境中运行良好的Web服务。 但有时(随机)会引发异常: §System.Threading.Tasks.Task.ThrowifeException(布尔值) includeTaskCanceledExceptions)\r\n System.Threading.Tasks.Task1.GetResultCore(布尔waitCompletionNotification)\r\náSystem.Threading.Tasks.Task1.get_Result()\r\ná fct

我有一个在生产环境中运行良好的Web服务。 但有时(随机)会引发异常:

§System.Threading.Tasks.Task.ThrowifeException(布尔值) includeTaskCanceledExceptions)\r\n System.Threading.Tasks.Task
1.GetResultCore(布尔waitCompletionNotification)\r\náSystem.Threading.Tasks.Task
1.get_Result()\r\ná fctSendRequestSynchrone[T](字符串请求,enumHttpMethod方法, 对象运算放大器)\r\náAPI.csRestApi.d\u 0`1.MoveNext()

这是我的密码:

.........

//Here is the line which raises the exception :
fctSendRequestSynchrone<string>(string.Format("logs/{0}/message", _lIdLog), cs.enumHttpMethod.POST, oLogLigne);

.........
//-------------------------------------------------------------------------------------

private T fctSendRequestSynchrone<T>(string sRequest, csRestApi.enumHttpMethod eMethod, object oParams = null)
{
Task<T> otask = SendRequest<T>(sRequest, eMethod, oParams);
return otask.Result;
}

//-------------------------------------------------------------------------------------

public async Task<T> SendRequest<T>(string sAction, enumHttpMethod eMethod, object oParams = null)
{

string sResponse = string.Empty;
T oValue;

using (var oClient = new HttpClient(new LogginHandler(_oCnx, new HttpClientHandler())))
{
oClient.DefaultRequestHeaders.Accept.Clear();
oClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

string sRequest = string.Concat(_sUrlApi, "/", sAction);

if (_oToken != null)
{
oClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(_oToken["token_type"], _oToken
["access_token"]);
}

using (HttpResponseMessage oResponse = await oClient.PostAsJsonAsync(sRequest, oParams))
{
if (oResponse.IsSuccessStatusCode)
{
HttpContent content = oResponse.Content;
sResponse = await content.ReadAsStringAsync();
}
else
{
throw new RestApiException(oResponse);
}
}

}

oValue = JsonConvert.DeserializeObject<T>(sResponse);

return oValue;
}
。。。。。。。。。
//以下是引发异常的行:
fctSendRequestSynchrone(string.Format(“logs/{0}/message”,_lIdLog),cs.enumHttpMethod.POST,oLogLigne);
.........
//-------------------------------------------------------------------------------------
私有T fctSendRequestSynchrone(字符串sRequest,csRestApi.enumHttpMethod eMethod,对象oParams=null)
{
任务otask=发送请求(sRequest、eMethod、oParams);
返回otask.Result;
}
//-------------------------------------------------------------------------------------
公共异步任务SendRequest(字符串sAction,enumHttpMethod eMethod,对象oParams=null)
{
string sResponse=string.Empty;
T卵蓝;
使用(var-oClient=new-HttpClient(new-LogginHandler(_-oCnx,new-HttpClientHandler()))
{
oClient.DefaultRequestHeaders.Accept.Clear();
oClient.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
string sRequest=string.Concat(_sUrlApi,“/”,sAction);
如果(_oToken!=null)
{
oClient.DefaultRequestHeaders.Authorization=新系统.Net.Http.Headers.AuthenticationHeaderValue(_-oToken[“令牌类型”],_-oToken
[“访问令牌]);
}
使用(HttpResponseMessage或Response=wait oClient.postsJSsonasync(sRequest,oParams))
{
if(或响应。IsSuccessStatusCode)
{
HttpContent=响应物含量;
sResponse=wait content.ReadAsStringAsync();
}
其他的
{
抛出新的RestApiException(或response);
}
}
}
oValue=JsonConvert.DeserializeObject(sResponse);
返回椭圆形;
}
你有什么想法吗

事先非常感谢


埃里克

罗曼·卡林楚克,乌鸦编码员:谢谢你的回复。 罗马卡林丘克: 以下是整个stacktrace:

à System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)\r\n   à System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)\r\n   à System.Threading.Tasks.Task`1.get_Result()\r\n   à logs.csLogWS.fctSendRequestSynchrone[T](String sRequest, enumHttpMethod eMethod, Object oParams)\r\n   à logs.csLogWS.sbrErrorLigneRejet(String sMessage, String sCdRejet, Exception oException)\r\n   à logs.csLogWS.ligneLogInformation(String sMessage)\r\n   à Importation.Program.sbrImportUnitaire(String sCdInfImp, String sFileNameIn, String sFileStructure, String sLiProcedure, String[] args)|   à Service.API.csRestApi.<SendRequest>d__0`1.MoveNext()".
a System.Threading.Tasks.Task.ThrowifeException(布尔includetaskCanceledException)\r\n a System.Threading.Tasks.Task`1.GetResultCore(布尔waitCompletionNotification)\r\n a System.Threading.Tasks.Task`1.get_Result()\r\nálogs.csLogWS.fctSenderRequestSynchronous[T](字符串请求、enumHttpMethod方法、对象oParams)\r\nálogs.csLogWS.sberrorlignerejet(String-sMessage,String-sCdRejet,Exception-oException)\r\nálogs.csLogWS.ligneLogInformation(String-sMessage)\r\náimport.Program.sbrimportionitaire(String-sCdInfImp,String-sFileNameIn,String-sFileStructure,String-sliprodure,String[]args)| a-Service.API.csRestApi.d_0`1.MoveNext()。
我在前面的问题帖子中简化了它。 应用程序在生产环境中,我是否必须将pdb文件放在生产服务器上才能获得更多的stacktrace


Crowcoder:你的意思是,结果在等待,而SendRequest也在等待?你有什么建议?

罗曼·卡林楚克(Roman Kalinchuk,Crowcoder):谢谢你的回复。 罗马卡林丘克: 以下是整个stacktrace:

à System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)\r\n   à System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)\r\n   à System.Threading.Tasks.Task`1.get_Result()\r\n   à logs.csLogWS.fctSendRequestSynchrone[T](String sRequest, enumHttpMethod eMethod, Object oParams)\r\n   à logs.csLogWS.sbrErrorLigneRejet(String sMessage, String sCdRejet, Exception oException)\r\n   à logs.csLogWS.ligneLogInformation(String sMessage)\r\n   à Importation.Program.sbrImportUnitaire(String sCdInfImp, String sFileNameIn, String sFileStructure, String sLiProcedure, String[] args)|   à Service.API.csRestApi.<SendRequest>d__0`1.MoveNext()".
a System.Threading.Tasks.Task.ThrowifeException(布尔includetaskCanceledException)\r\n a System.Threading.Tasks.Task`1.GetResultCore(布尔waitCompletionNotification)\r\n a System.Threading.Tasks.Task`1.get_Result()\r\nálogs.csLogWS.fctSenderRequestSynchronous[T](字符串请求、enumHttpMethod方法、对象oParams)\r\nálogs.csLogWS.sberrorlignerejet(String-sMessage,String-sCdRejet,Exception-oException)\r\nálogs.csLogWS.ligneLogInformation(String-sMessage)\r\náimport.Program.sbrimportionitaire(String-sCdInfImp,String-sFileNameIn,String-sFileStructure,String-sliprodure,String[]args)| a-Service.API.csRestApi.d_0`1.MoveNext()。
我在前面的问题帖子中简化了它。 应用程序在生产环境中,我是否必须将pdb文件放在生产服务器上才能获得更多的stacktrace


Crowcoder:你的意思是。结果也在等待,而SendRequest也在等待?你有什么建议?

请提供完全异常,StackTrace中只有一部分可能是死锁,因为你使用了
。结果
等待
的异步调用进行调用。请提供完全异常,只有一部分是异步调用StackTrace您可能处于死锁状态,因为您在
等待
异步调用的调用中使用了
.Result