2011-01-13 4 views
0

Благодаря this answer, теперь я могу успешно вызвать службу JSON RESTful с помощью WCF-клиента. Но эта служба использует коды состояния HTTP для уведомления результата. Я не уверен, как я могу получить доступ к этим кодам статуса, поскольку я просто получаю исключение на стороне клиента при вызове службы. Даже исключение не имеет свойства кода состояния HTTP. Он просто похоронен в самом сообщении об исключении.Доступ к коду статуса HTTP при использовании WCF-клиента для доступа к службам RESTful

alt text

Таким образом, вопрос, как проверить/получить доступ к коду состояния HTTP ответа, когда услуга называется.

ответ

1

Как быстро победить, вы можете получить доступ к коду состояния в исключении, как это:

try 
{ 
    client.DoSomething(); // call the REST service 
} 
catch (Exception x) 
{ 
    if (x.InnerException is WebException) 
    { 
     WebException webException = x.InnerException as WebException; 
     HttpWebResponse response = webException.Response as HttpWebResponse; 
     Console.WriteLine("Status code: {0}", response.StatusCode); 
    } 
} 

Может быть, есть решение с инспектором сообщения. Но я еще не понял этого.

0

Решение без WCF будет использовать HttpRequest и DataContractJsonSerializer классы непосредственно:

private T ExecuteRequest<T>(Uri uri, object data) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 

    // If we have data, we use a POST request; otherwise just a GET request. 
    if (data != null) 
    { 
     request.Method = "POST"; 
     request.ContentType = "application/json"; 
     DataContractJsonSerializer serializer = new DataContractJsonSerializer(data.GetType()); 
     Stream requestStream = request.GetRequestStream(); 
     serializer.WriteObject(requestStream, data); 
     requestStream.Close(); 
    } 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

    DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(T)); 
    Stream responseStream = response.GetResponseStream(); 
    T result = (T)deserializer.ReadObject(responseStream); 
    responseStream.Close(); 
    response.Close(); 
    return result; 
} 
+0

Я знал, что я мог бы сделать это с простыми запросами HTTP, но с использованием WCF проще. Но ваш другой ответ имеет смысл. – Hemant