1

WCFを使用してReSTfulサービスを作成しています。私のOperationContractは次のようになります。

[OperationContract]
[WebGet(
 ResponseFormat = WebMessageFormat.Json,
 BodyStyle = WebMessageBodyStyle.Wrapped,
 UriTemplate = "GetItemList/{token}/{value}"
)]
Stream GetItemList(string token);

したがって、http://example.com/Service1.svc/GetItemList/myToken/myValueを呼び出すと、サービスが呼び出されます。

ここで、ユーザーがhttp://example.com/Service1.svc/GetItemList/myToken/または http://example.com/を呼び出すときに、「メソッド/エンドポイントが存在しません」というリンクを指定するデフォルトのメソッドを記述します 。 Service1.svc / GetItemList /myValue/または http://example.com/Service1.svc/GetItemList/

コードにそれを実装するにはどうすればよいですか?

今私がしていることは次のようなものです:

 [OperationContract]
 [WebGet(
   ResponseFormat = WebMessageFormat.Json,
   BodyStyle = WebMessageBodyStyle.Wrapped,
   UriTemplate = "GetItemList/"
 )]
 string ValidateItemList();

 [OperationContract]
 [WebGet(
   ResponseFormat = WebMessageFormat.Json,
   BodyStyle = WebMessageBodyStyle.Wrapped,
   UriTemplate = "GetItemList/{Val1}"
 )]
 string ValidateItemList(string Val1);

そして、この関数では、「メソッドが存在しません」という文字列を返すだけです。

もっと良い方法はありますか?サービスに送信されるURLのエラーメッセージをカスタマイズできますか?たとえば、私のサービスに送信される、存在しないすべてのURLリクエストに共通のメッセージですか?

4

2 に答える 2

0

上記の問題に対する実行可能な解決策は見つかりませんでした。しかし、私は別の選択肢を見つけました。VS 2012で、MicrosoftはASP.NETWebAPIをリリースしました。これは、WCFRestの次のバージョンであると彼らは言います。したがって、これらの状況を非常に簡単に処理できます。その中でルーティング方法を使用できます。

その解決策に興味がある人は誰でも、この投稿を調べて有利なスタートを切ることができます:http ://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web- api

于 2012-11-15T09:11:24.570 に答える
0

基本的に、WCF のアーキテクチャは、任意のプロトコル (この場合は http) の低レベル コンポーネントを抽象化しようとするため、これらの種類の詳細について心配する必要はありません。残念ながら、そのエンジンは、エンジンが正しくルーティングできないリクエストを処理する適切な方法を公開していません。

この場合、URI を正しいコントラクト実装クラスに「ディスパッチ」することはできません。エンジンには、wcf フレームワーク内で構成またはプログラムによってカスタマイズできる Dispatchers と呼ばれるこれらの素晴らしいコンポーネントがあります。問題は、それらを実装するのが非常に面倒だということです。以下にリストされている別の質問への回答で、予期しないメッセージディスパッチャーを実装しました。

WCF サービスに渡された無効な URI の処理

さらに情報が必要な場合はお知らせください。

于 2012-08-01T15:26:02.743 に答える