1

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

代替テキスト

問題は、サービスが呼び出されたときに応答のHTTPステータスコードを確認/アクセスする方法です。

4

2 に答える 2

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

メッセージインスペクタを使用した解決策があるかもしれません。しかし、私はまだそれを理解していません。

于 2011-01-14T18:52:19.553 に答える
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;
}
于 2011-01-14T18:59:00.313 に答える