1

私は、この質問が何度も聞かれたことを知っています (私はほとんどすべての投稿を経験したことを知っていると信じています)。しかし、私はまだそれを機能させることができません...

次の簡単なサービスがあります。

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet(UriTemplate = "/data/{id}", ResponseFormat = WebMessageFormat.Json)]
    [FaultContract(typeof(CustomError))]
    Data GetData(string id);
}

[DataContract]
public partial class Data
{
    [DataMember]
    public string Property { get; set; }
}

[DataContract]
public class CustomError
{
    [DataMember]
    public string Message { get; set; }
}

の実装は次のGetDataとおりです。

public Data GetData(string id)
{
    int dataId = -1;
    if (!Int32.TryParse(id, out dataId))
    {
        var detail = new CustomError() { Message = "DataID was not in the correct format."};
        throw new FaultException<CustomError>(detail);
    }

    ... return instance of Data
}

有効な ID を渡すと、適切なDataオブジェクトがネットワーク経由で渡されますが、(FaultException をトリガーするために) 無効な ID を渡すと、常にProtocolException同じメッセージと共にクライアントに渡されます。

リモート サーバーが予期しない応答を返しました: (400) 不正な要求。

私は最初に実装の道をたどりましたIErrorHandlerが、ここで問題が発生し始めたので、方程式からそれを排除するために、この基本的なサービスを実装しました...しかし、それを機能させることさえできません。

私のクライアントでは、サービス参照を作成し、クライアント プロキシを使用しています。

using (var client = new DataServiceClient())
{
    try
    {
        var user = client.GetData("twenty");
        Console.WriteLine(user.Property);
    }
    catch (System.ServiceModel.FaultException<CustomError> ex)
    {
        Console.WriteLine(ex.Message);
    }
}

足りないものはありますか?(リクエストに応じて、サービス/クライアントの構成設定を投稿できます)

注意: サービス参照を追加してクライアント プロキシを生成する場合 (私は VS2010 を使用してWebGet/WebInvokeいます)、生成されたクライアントに属性を手動で追加する必要があることに気付きました。

4

3 に答える 3

2

を使用していwebHttpBindingますか? その場合は、ここWebFaultException<T>に記載されているとおりに使用する必要があります。

于 2011-07-20T19:54:06.587 に答える
0

私はここで少し混乱しています。ここでRESTまたはSOAPサービスを使用していますか?質問にはRESTのタグが付けられ、WebGet属性はRESTを提案します。しかし、質問にはWCF-PROXYというタグも付けられており、SOAP操作であり、RESTクライアントをまったく生成しないサーブ参照を追加することについて話します。RESTでは、ODataサービスを使用していない限り、サービス参照の追加を行うために使用できるメタデータはありません。代わりに、WebClientまたはHttpWebRequestなどを使用して、作成したURLを使用してデータを取得します。

于 2011-07-20T20:11:27.527 に答える
0

あなたが受け取っているというエラーから、あなたが投げているところに到達しているとは思いませんFaultException<CustomError>。サービスがリクエストの処理方法を認識していないようです。

于 2011-07-20T19:51:41.167 に答える