感謝this answer,我現在能夠使用WCF客戶端成功調用JSON RESTful服務。但該服務使用HTTP狀態碼來通知結果。我不確定如何訪問這些狀態碼,因爲我只是在調用服務時在客戶端收到異常。即使這個異常也沒有HTTP狀態碼屬性。它只是埋在異常消息本身中。訪問HTTP狀態碼,同時使用WCF客戶端訪問RESTful服務
所以現在的問題是,如何檢查/訪問響應的HTTP狀態代碼,當服務被調用。
感謝this answer,我現在能夠使用WCF客戶端成功調用JSON RESTful服務。但該服務使用HTTP狀態碼來通知結果。我不確定如何訪問這些狀態碼,因爲我只是在調用服務時在客戶端收到異常。即使這個異常也沒有HTTP狀態碼屬性。它只是埋在異常消息本身中。訪問HTTP狀態碼,同時使用WCF客戶端訪問RESTful服務
所以現在的問題是,如何檢查/訪問響應的HTTP狀態代碼,當服務被調用。
作爲一個快速取勝,你可以在這樣的異常訪問狀態代碼:
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);
}
}
也許有一個消息檢查的解決方案。但我還沒有弄明白。
沒有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;
}
我知道我可以用普通的HTTP請求做,但使用WCF是更容易。但你的其他答案確實有道理。 – Hemant 2011-01-15 11:18:28