如何以编程方式更改WCF服务BodyStyle?

时间:2013-08-02 01:42:19

标签: c# asp.net .net wcf

我有一个WCF网络服务,它与一些不同的客户端非常酷。

有些客户将其用作 XML ,其他客户用作 JSON 。 为了有这种行为,我设计了所有服务,好像他们有一个扩展。如果扩展名等于 json ,则返回JSON,否则返回XML。

下面的代码显示了我如何完成此行为。

    [WebGet(UriTemplate = "test.{PsFormat}")]
    public string test(string PsFormat) {
        DefineResponseFormat(PsFormat);
        return "test";
    }

    public static void DefineResponseFormat(string PsFormat)
    {
        OutgoingWebResponseContext context = WebOperationContext.Current.OutgoingResponse;
        if (PsFormat.ToLower() == "json") {
            context.Format = WebMessageFormat.Json;
            context.ContentType = "application/json; charset=utf-8";
        }
        else if (PsFormat.ToLower() == "wjson") {
            context.Format = WebMessageFormat.Json;
            context.ContentType = "application/json; charset=utf-8";
            // CHANGE BodyStyle TO WRAPPED
        }
        else {
            context.Format = WebMessageFormat.Xml;
            context.ContentType = "text/xml; charset=utf-8";
        }
    }

问题是,我总是返回JSON,就像WebGet Attribute BodyStyle = WebMessageBodyStyle.Bare一样,这是默认值。而现在,我有一个新的客户端,需要像使用BodyStyle = WebMessageBodyStyle.Wrapped那样使用它。 (在上面的代码中代表,如果有扩展名 wjson 。)

问题是:如何以编程方式更改BodyStyle值?