1

自己ホスト型の 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
...
4

1 に答える 1

0

解決しました!

MessageInspector に次のようなものがありました。

HttpResponseMessageProperty responseProperty = new HttpResponseMessageProperty(); responseProperty.Headers.Add("Access-Control-Allow-Origin", "*"); reply.Properties["httpResponse"] = responseProperty;

これは、reply.Properties で既存の HttpResponseMessageProperty を上書きしていました。これには、すべての contentType 設定が含まれます。代わりに、最初に HttpResponseMessageProperty を取得し、見つかった場合は既存のものを使用します。

私はそれを見ることができて幸運でした。

于 2013-07-15T14:29:18.363 に答える