私の経験では、WCFはこの分野では優れていません。MVCは、特定のエンドポイントに必要なものを何でも返すことができる「アクション結果」の概念による大きな改善です。(そして、おそらく新しい「Web API」は、WCFとMVCの機能を組み合わせたものになるでしょう。)
とはいえ、クライアントに応答形式を選択させる最も簡単なWCFの方法は、ストリームの戻りの種類を指定し、要件に従って結果をシリアル化することです。
したがって、このようなメソッドを宣言し、JSONおよびXMLに選択したシリアライザーを使用します。
[OperationBehavior]
[WebGet()]
public Stream SomeOperation(string format)
{
string test = "Hello world";
string encodedResult;
if (format.ToLower() == "xml") {
// serialize as XML (eg, XML Serializer)
HttpContext.Current.Response.ContentType = "text/xml";
}
else if (format.ToLower() == "json") {
// serialize as JSON (eg, Newtonsoft Json)
HttpContext.Current.Response.ContentType = "application/json";
}
var ms = new MemoryStream(Encoding.UTF8.GetBytes(encodedResults));
return ms;
}
2番目の質問では、Fiddlerなどの無料ツールを使用してサーバーからの生のHTTP応答を検査することをお勧めします。