WCF WebInvoke ResponseFormat

Tengo un servicio de servicio de WCF y quiero permitir que el usuario elija el formato de solicitud que desee, tengo las decoraciones

<code>    [OperationContract]
    [WebInvoke(Method = "GET", 
        ResponseFormat = WebMessageFormat.Xml, 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        UriTemplate = "getstreamurl?ch={ch}&format=xml")]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "getstreamurl?ch={ch}&format=json")]
</code>

En primer lugar, ¿hay una manera de especificar el ResponseFormat en tiempo de ejecución y tomar el formato como un argumento para el método? Después de leer alrededor, no lo creo ... OK siguiente cosa El código anterior está bien y funciona, pero tengo un problema, quiero poder especificar un valor predeterminado, por lo que cuando no se pasa ningún argumento de formato, simplemente lo prefiero, pero si yo decoro asi

<code>    [WebInvoke(Method = "GET", 
        ResponseFormat = WebMessageFormat.Xml, 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        UriTemplate = "getstreamurl?ch={ch})]

    [OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "getstreamurl?ch={ch}&format=json")]
</code>

Donde el XML es el predeterminado, si trato de llamar al método de servicio a través del navegador, me dice que:

UriTemplateTable no admite varias plantillas que tengan una ruta de acceso equivalente a la plantilla 'getstreamurl? Ch = {ch}', pero tienen diferentes cadenas de consulta, donde las cadenas de consulta no pueden ser desambiguadas a través de valores literales. Consulte la documentación de UriTemplateTable para obtener más detalles.

Obviamente se pueden distinguir, pero parece que WCF solo está leyendo el argumento y eso es ... ¿Alguna sugerencia?

Respuestas a la pregunta(2)

Su respuesta a la pregunta