2011-01-27 15 views
4

私は初めてのWCF 4.0 Restサービスを終了しましたが、FiddlerとFirefox経由でサービスを呼び出す間に返されるデータのContent-Typeが変更される理由を理解していません。WCF 4.0 Restサービス設定のコンテンツタイプ

[ServiceContract] 
public interface IProjectService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "project/{id}/json", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] 
    ProjectDataContract GetProjectJson(string id); 

    [OperationContract] 
    [WebGet(UriTemplate = "project/{id}/xml", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)] 
    ProjectDataContract GetProjectXml(string id); 

    [OperationContract] 
    [WebGet(UriTemplate = "userprojects/{userKey}/json", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] 
    List<ProjectDataContract> GetProjectsByUserJson(string userKey); 

    [OperationContract] 
    [WebGet(UriTemplate = "userprojects/{userKey}/xml", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)] 
    List<ProjectDataContract> GetProjectsByUserXml(string userKey); 
} 

ご覧のとおり、各操作の応答形式を設定しています。要求が "/ json"で終わる場合は、jsonデータを返します。要求が "/ xml"で終わると、xmlデータが返されます。少なくともそれは私の意図です。

Firefoxでhttp://localhost:5050/ProjectServiceLibrary/project/27/xmlを呼び出すと、content-typeが "text/html"に設定されているのに対し、fiddlerで呼び出された同じ要求では正しいアプリケーションタイプ "application/xml"が表示されます。同じことが、 "/ json"という接尾辞付きの要求(firefoxでは "text/html"、Fiddlerでは "application/json")を呼び出すと同じことが起こります。

これはどうしてですか?どちらを信頼しますか?私はJSONView Firefoxのアドオンをダウンロードしましたが、それはすべてがjsonのように見えます。 XMLをJSONとして扱います。

私は何かが明らかでないと確信しています。どんな助けでも大歓迎です。

答えて

3

これは、クライアントから送信された要求のAcceptヘッダーに関連しています。 Acceptヘッダーには、MIMEタイプの優先順位付けされたリストが含まれています。 Acceptヘッダーはクライアント(Firefox、Fiddler)によって定義され、受信可能なコンテンツタイプをサーバーに通知します。サーバーは、優先度と互換性に基づいて最適な一致を使用します。

FireFoxによって生成されたAcceptヘッダーはtext/htmlに優先順位を与えます。可能であればtext/htmlを送信するようサーバーに指示します。あなたはおそらくFiddlerがその逆を行い、application/xmlに高い優先度を与えていることがわかります。これはあなたが見ていることを説明しています。

リクエストヘッダーに関する詳細はKris Jordans blogです。

+0

ああ、これは今や理にかなっています。説明をありがとう。 FirefoxとFiddlerのURLをチェックして、コードが機能しているかどうかを確認していました。私は本当に異なる結果によって混乱していて、それが私であることを確信しました。だから、jQueryを使用して、 "/ json"という接尾辞のURLにアクセスすると、正しいjsonデータを受け取ると仮定しています。なぜなら、jQueryが予期しているコンテンツタイプを指定しているからです。これを確認する必要がありますが、あなたの答えに照らしてそれは意味があります。再度、感謝します。 –

関連する問題