xml 1.0 では 制御文字が使えない

制御文字() が使えないようです。てな訳で実験してみました。
制御文字を返す WebService を作成し、VisualStudio の Web 参照の追加からを呼び出してみる。

WebService

using System.Web.Services;

namespace WebService1
{
  /// <summary>
  /// Service1 の概要の説明です
  /// </summary>
  [WebService(Namespace = "http://tempuri.org/")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  [System.ComponentModel.ToolboxItem(false)]
  // この Web サービスを、スクリプトから ASP.NET AJAX を使用して呼び出せるようにするには、次の行のコメントを解除します。
  // [System.Web.Script.Services.ScriptService]
  public class Service1 : System.Web.Services.WebService
  {
    [WebMethod]
    public string HelloWorld()
    {
      return ((char)1).ToString();
    }
  }
}

Client

using System;

namespace ConsoleApplication17
{
  class Program
  {
    static void Main(string[] args)
    {
      localhost.Service1 service = new ConsoleApplication17.localhost.Service1();
      Console.WriteLine(service.HelloWorld());
      Console.ReadKey();
    }
  }
}

これで、InvalidOperationException が発生する。


ちなみに、Service 参照(WCF) では、例外が発生しなかった。

Client

using System;

namespace ConsoleApplication17
{
  class Program
  {
    static void Main(string[] args)
    {
      ServiceReference1.Service1SoapClient client = new ConsoleApplication17.ServiceReference1.Service1SoapClient();
      Console.WriteLine(client.HelloWorld());
      Console.ReadKey();
    }
  }
}

XML 使ってる人は、やっぱある程度仕様書とか読んでるのかな?てか読まなきゃダメだよなと実感しました。
使ってる技術の仕様って全然押さえてない。
C# とか CLR の仕様 ( 共通言語ランタイム (CLR) ) もちゃんと読んだ事ないし、Java の VM の仕様とか資料 ( www.ingrid.org ) なんて見た事もない。


本とか Web とかでそれっぽいページを見ては、試してるだけなのかなと反省中。。
なんか以前読んだ 「手順」ではなく「構造」を知ろうぜ! - Fight the Future を思い出した。


だけど少なくとも今後 xml を使う場合、制御文字がデータに含まれるテストケースも実装するだろうと。この失敗を覚えているから。