WCF JSON 服务在故障时返回 XML

标签 wcf json

我正在运行 ServiceHost 来测试我的一项服务,并且一切正常,直到我抛出 FaultException - 砰,我得到的是 XML 而不是 JSON

我的服务契约(Contract) - 可爱

   /// <summary>
    ///   <para>Get category by id</para>
    /// </summary>
    [OperationContract(AsyncPattern = true)]
    [FaultContract(typeof(CategoryNotFound))]
    [FaultContract(typeof(UnexpectedExceptionDetail))]
    IAsyncResult BeginCategoryById(
        CategoryByIdRequest request,
        AsyncCallback callback, object state);

    CategoryByIdResponse EndCategoryById(IAsyncResult result);

主机设置 - scrummy yum
var host = new ServiceHost(serviceType, new Uri(serviceUrl));
host.AddServiceEndpoint(
    serviceContract,
    new WebHttpBinding(), "")
        .Behaviors.Add(
             new WebHttpBehavior
                            {
                                DefaultBodyStyle = WebMessageBodyStyle.Bare,
                                DefaultOutgoingResponseFormat = WebMessageFormat.Json,
                                FaultExceptionEnabled = true
                            });

host.Open();

这是电话 - 哦,肚子疼
var request = WebRequest.Create(serviceUrl + "/" + serviceName);
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = 0;

try
{
    // receive response
    using (var response = request.GetResponse())
    {
        var responseStream = response.GetResponseStream();

        // convert back into referenced object for verification
        var deserialiser = new DataContractJsonSerializer(typeof (TResponseData));
        return (TResponseData) deserialiser.ReadObject(responseStream);
    }
}
catch (WebException wex)
{
    var response = wex.Response;

    using (var responseStream = response.GetResponseStream())
    {
        // convert back into fault
        //var deserialiser = new DataContractJsonSerializer(typeof(FaultException<CategoryNotFound>));
        //var fex = (FaultException<CategoryNotFound>)deserialiser.ReadObject(responseStream);

        var text = new StreamReader(responseStream).ReadToEnd();
        var fex = new Exception(text, wex);    

        Logger.Error(fex);
        throw fex;
    }
}

文本 var 包含正确的错误,但序列化为 Xml
我在这里做错了什么?

最佳答案

答案是实现一个 IErrorHandler 和支持行为

我发现了 iainjmitchell 的这篇优秀帖子

http://iainjmitchell.com/blog/?p=142

关于WCF JSON 服务在故障时返回 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6440669/

相关文章:

c# - WCF 自托管,通过控制台应用程序托管

c# - 我如何获得 WSDL/描述以便我可以在另一个项目中添加 Web 引用?

java - 如何从 Spring Security 中的过滤器向 header 添加值?

javascript - Ajax POST 请求变成 GET 请求

json - "Ternary logic"返回值 : foo, bar 或错误

wcf - RESTful WCF 安全/身份验证和 jQuery AJAX 调用

WCF 命名管道客户端通知/检测管道状态更改

c# - 从解决方案内更新服务引用

Java:Jackson 数据绑定(bind)无法从 JSON 文件映射整个类

java - 在java中解析JSON?