1

この質問は、カスタム プロバイダーを使用する WCF データ サービスに関するものです。最近まで、IDataServiceQueryProvider または IDataServiceUpdateProvider の実装によってスローされる例外に問題はありませんでした。現在直面している問題は、IDataServiceQueryProvider.GetPropertyValue によってスローされた例外が正しく処理されていないことです。たとえば、次のリクエスト:

http://localhost:52788/NorthwindCustomers.svc/Customers('ALFKI')

この実装では:

public object GetPropertyValue(object target, ResourceProperty resourceProperty)
{
    throw new DataServiceException((int)HttpStatusCode.BadRequest, "Bad request!");
}

結果:

HTTP/1.1 200 OK
<?xml version="1.0" encoding="utf-8"?><entry xml:base="http://localhost:52788/NorthwindCustomers.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><id>http://localhost:52788/NorthwindCustomers.svc/Customers('ALFKI')</id><category term="NorthwindModel.Customer" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" title="Customer" href="Customers('ALFKI')" /><m:error><m:code /><m:message xml:lang="en-US">Bad request!</m:message></m:error>

これに対して、次のような他のメソッドから同じ例外がスローされます。

public IQueryable GetQueryRootForResourceSet(ResourceSet resourceSet)
{
    throw new DataServiceException((int)HttpStatusCode.BadRequest, "Bad request!");
}

予想される結果:

HTTP/1.1 400 Bad Request
<?xml version="1.0" encoding="utf-8" standalone="yes"?><error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><code></code><message xml:lang="en-US">Bad request!</message></error>

必要最小限のサービスとカスタム プロバイダーを使用してこれを再現し、本番環境の実装によって問題が発生する可能性を排除しました。

フレームワークは、GetPropertyValue を除く IDataServiceQueryProvider および IDataServiceUpdateProvider メソッドのすべての実装によってスローされた例外に対して、正しいステータス コードと本文を含む応答を作成するのはなぜですか?

4

0 に答える 0