2016-05-10 1 views
1

WCFで.net ODataクライアントを実装しています。 ODataバージョン3を使用します。このサービスはベンダーによって実装されています。不足しているプロパティを持つオブジェクトを保存すると、サーバーはエラーを返します。しかし、エラー応答には正しい形式(Specification)がありません。したがって、DataServiceContext.SaveChanges(...)メソッドは常にスロー:WCFがエラーを検出すると、OData 3.0レスポンスはどのように表示されますか?

System.Net WebException: "The remote server returned an error: (400) Bad Request."

を、私は、エラーの理由を取得する可能性を持っていないこの例外を除いて - 何のInnerExceptionが設定されていません。

WCF DataServiceContext.SaveChanges(...)がエラーを検出し、必要な情報を取得できるように、このようなエラーレスポンスはどのように見えますか?

ありがとうございます。

EDIT:

私は、サーバーからの応答を変更するためにfiddlerを使用。これで正しいフォーマットされた応答を見つけようとしました。これは、仕様を再読み込みしてコメントを検討した後に試した最後のバージョンです。

HTTP/1.1 40 Bad Request 
Cache-Control: private 
Content-Type: application/atom+xml;type=feed 
Date: Wed, 11 May 2016 08:02:07 GMT 
Content-Length: 243 
DataServiceVersion: 3.0; 

<?xml version="1.0" encoding="utf-8"?> 
<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <m:code /> 
    <m:message xml:lang="en-US"> 
    Resource not found for the segment 'Productss'. 
    </m:message> 
</m:error> 

悲しいことに、それでもまだ動作していません。

+0

クライアントとサーバーの両方がODataバージョン3を使用していますか? – lencharest

+0

私はクライアントについては確信しています。サーバーはベンダーのもので、ODataバージョン3.0と呼ばれていますが、手作業で実装する必要があります。 – scher

+0

サービスからの応答で 'DataServiceVersion'ヘッダーを探します。 [OData v3仕様](http://www.odata.org/documentation/odata-version-3-0/odata-version-3-0-core-protocol/)でバージョニングを読んでください。 – lencharest

答えて

1

クライアントが応答を読み取ることができないためではありません。サーバーが送信した要求が「好き」ではないことを示すExceptionです。

400不正リクエストは、通常、サーバーに送信されたリクエストが不正であることをクライアントに通知するために使用されます。

サーバーに要求を正しい構造で送信すると、エラーは消えてしまいます。

希望すると助かります!

+0

サービス(私の制御下にある)がリクエストを受け取り、リクエストを処理するので、正しい構造でリクエストを送信することができます。処理中、エラーが発生する。新しく追加されたオブジェクトにはいくつかのプロパティ値がありません。これで、サーバーはODataに準拠したエラーで応答する必要があります。このレスポンスはどのようにしてWCFクライアントがODataエラーとして認識し、 'WebException'をスローしないかのようにしなければなりません。 '400 Bad Request'は実際にサーバから返されたものです。 – scher

+0

[this](http://www.odata.org/documentation/odata-version-3-0/odata-version-3-0-core-protocol/)セクション9.2を見てください。これはこれがあなたが得るべき応答。 'OData'が' HTTP'レスポンスコードを使用するので、クライアントが 'OData'固有の' Exception'をスローする能力を持っているとは思えません。したがって、 'WebException'はサーバが返す結果に合っています。 –

+0

しかし、 'WebException'では、サーバーの応答にアクセスできなくなりました。ステータスコードを取得するだけで、[wireshark](http://wireshark.org)でトレースされた応答にあっても、エラーが発生する理由を判断できません。 – scher

関連する問題