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 的解决方案是直接使用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;
}
于 2011-01-14T18:59:00.313 回答