I am creating a Rest Communication interface for a small windows phone application since you can not call SOAP web services. The interface is simple and uses JsonConverter to parse json responses.
Code looks like this
public class Communicate<RequestType,ResposeType> where ResposeType:class where RequestType :class
{
public async Task< ResposeType> CommunicateSvr(RequestType _parameter,string methodName,string serverIp)
{
String reqData = JsonConvert.SerializeObject(_parameter);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, serverIp+methodName);
request.Content = new StringContent(reqData, Encoding.UTF8, "application/json");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders
.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
if (response.StatusCode == HttpStatusCode.OK)
return JsonConvert.DeserializeObject<ResposeType>(await response.Content.ReadAsStringAsync());
else
throw new Exception("Error connecting to " + serverIp+methodName+ " ! Status: " + response.StatusCode);
}
}
I am facing a big problem. When the code reach to
HttpResponseMessage response = await
client.SendAsync(request,HttpCompletionOption.ResponseHeadersRead);
the thread ends , terminates and the application seems to stop. Is still running but is not doing anything. I set two breakpoints one after the other and the second was never reached. I don't what's wrong, I have searched the web a lot but I did not found anything useful. Thanks in advance, waiting for your response
On the output windows I got the following message:
The thread 0xdec has exited with code 259 (0x103).
The thread 0x2180 has exited with code 259 (0x103).
You're probably calling
Task.Wait
orTask<T>.Result
further up your call stack, which will cause a deadlock that I explain on my blog. In this case, your UI thread will deadlock (not exit).The best fix is to change
Wait
orResult
toawait
.