、ここの周りの仕事があります。基本的には、レスポンスを送信するときにコンテンツタイプを変更する振る舞い拡張を作成する必要があります。
あなたのweb.configファイルのようなものが含まれる必要があるだろう。そして、あなたは最終的には、その後IDispatchMessageInspectorを実装するクラスをBehaviorExtensionElement
public class ServiceContentTypeBehaviorExtensionElement : BehaviorExtensionElement
{
protected override object CreateBehavior()
{
return new ServiceContentTypeMessageInspector();
}
public override Type BehaviorType
{
get
{
return typeof(ServiceContentTypeMessageInspector);
}
}
}
から継承するクラスを作成し、する必要があります
<behaviors>
<serviceBehaviors>
<behavior name="WebServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<MessageInspector/>
</behavior>
</serviceBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="MessageInspector"
type="Namespace.ServiceContentTypeBehaviorExtensionElement, assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
をし、
public class ServiceContentTypeMessageInspector : IDispatchMessageInspector, IServiceBehavior
{
#region IDispatchMessageInspector
public object AfterReceiveRequest(ref Message request, IClientChannel channel,
InstanceContext instanceContext)
{
return null;
}
public void BeforeSendReply(ref Message reply, object correlationState)
{
// inspect and/or modify the reply
if (WebOperationContext.Current.OutgoingResponse.Headers[HttpResponseHeader.ContentType] == "text/html; charset=utf-8" &&
WebOperationContext.Current.OutgoingResponse.Format == WebMessageFormat.Xml)
{
WebOperationContext.Current.OutgoingResponse.Headers[HttpResponseHeader.ContentType] = "application/xml; charset=utf-8";
}
}
#endregion
#region IServiceBehavior
public void ApplyDispatchBehavior(ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
{
foreach (var endpoint in dispatcher.Endpoints)
{
endpoint.DispatchRuntime.MessageInspectors.Add(new ServiceContentTypeMessageInspector());
}
}
}
public void AddBindingParameters(ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints,
BindingParameterCollection bindingParameters)
{
}
public void Validate(ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase)
{
}
#endregion
}
:コンテンツタイプを変更することのハードワークを行いますIServiceBehavior
期待どおりに動作するはずです。
テキスト/ HTMLの応答の本文は何ですか?それにはエラーメッセージが含まれていますか? – carlosfigueira
ブラウザが使用しているaccept-Headerを調べるには、fiddlerのようなツールを使用します(または、デバッガを使用してWebOperationContext.Current.IncomingRequestを検査します)。少なくとも、あなたはそのような方法でブラウザの問題を排除することができます。 –
ブラウザのAcceptヘッダーは "text/html、application/xhtml + xml、application/xml; q = 0.9、*/*; q = 0.8"です。これはFireFox標準/デフォルトです。レスポンス本文はXML(正しいものと予期されるXML)ですが、レスポンスのコンテンツタイプはtext/htmlなので、ブラウザはXMLドキュメントのように扱わず、HTMLとしてレンダリングしようとします。 –