私は、この質問が何度も聞かれたことを知っています (私はほとんどすべての投稿を経験したことを知っていると信じています)。しかし、私はまだそれを機能させることができません...
次の簡単なサービスがあります。
[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
います)、生成されたクライアントに属性を手動で追加する必要があることに気付きました。