2011-01-13 111 views
0

感謝this answer,我現在能夠使用WCF客戶端成功調用JSON RESTful服務。但該服務使用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一個解決方案是直接使用的HttpRequestDataContractJsonSerializer類:

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 2011-01-15 11:18:28