自己ホスト型の WCF REST/webHttpBinding
エンドポイント バインド サービスがあります。それが提供するさまざまなコンテンツ タイプのストリームがいくつかあります。コンテンツ自体は正しく配信されているのですが、どのOutgoingResponse.ContentType
設定も無視され、代わりに"application/xml"
毎回配信されているようです。
ブラウザは、javascript と html (それがどのように消費されるかに依存します) についてはそれを乗り越えているようですが、より厳密に解釈される css ファイルについてはそうではありません。CSS ファイルは私が問題を認識した方法ですが、これはすべてのストリームの問題です。Chromebug と IE 開発者ツールはどちらも"application/xml"
、コンテンツ タイプの提供コードに何を入れたかに関係なく表示されます。Header
また、コンテンツ タイプ ヘッダーをinとして設定しようとしましOutgoingResponse
たが、それは違いはなく、おそらく OutgoingResponse.ContentType が既に行っていることを行うには長い道のりです。
[OperationBehavior]
System.IO.Stream IContentChannel.Code_js()
{
WebOperationContext.Current.OutgoingResponse.ContentType = "text/javascript;charset=utf-8";
var ms = new System.IO.MemoryStream();
using (var sw = new System.IO.StreamWriter(ms, Encoding.UTF8, 512, true))
{
sw.Write(Resources.code_js);
sw.Flush();
}
ms.Position = 0;
return ms;
}
この動作が追加されました:
var whb = new WebHttpBehavior
{
DefaultBodyStyle = System.ServiceModel.Web.WebMessageBodyStyle.WrappedRequest,
DefaultOutgoingRequestFormat = System.ServiceModel.Web.WebMessageFormat.Json,
DefaultOutgoingResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json,
HelpEnabled = false
};
この問題についてGoogle検索で出てきたので、念のため設定AutomaticFormatSelectionEnabled = true
してみましたが、これには影響しません。false
Stream と ContentType が連携して機能していることを示す十分な記事を見つけて、これが機能しない理由について私を混乱させています。Stream
は、エンベロープ全体ではなく、応答の本文のみを意図していると思います。
私の .svclog には、私が認識している興味深い/関連するものは何も表示されません。
============
Fiddler2 で、ブラウザーに表示されているとおりにヘッダーが配信されていることを確認できます。
...
Content-Type: application/xml; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
...