2011-01-13 4 views
0

this answerのおかげで、WCFクライアントを使用してJSON RESTfulサービスを正常に呼び出すことができます。しかし、そのサービスはHTTPステータスコードを使用して結果を通知します。私はちょうど私がサービスを呼び出す間にクライアント側で例外を受け取るので、私はどのようにそれらのステータスコードにアクセスできるかわかりません。例外にもHTTPステータスコードのプロパティはありません。例外メッセージ自体に埋め込まれているだけです。WCFクライアントを使用してRESTfulサービスにアクセスする際のHTTPステータスコードへのアクセス

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); 
    } 
} 

はたぶんメッセージインスペクターと解決策があります。しかし、私はそれをまだ理解していません。 WCFなし

0

ソリューションはの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

関連する問題