Azure アプリから WCF を使って Web サービスにアクセスしてみた

ASP.NET のアプリを Azure に移植してみた - お だ のスペース にて、ASP.NET で作ったアプリを Azure に載せ替えたんだけど Azure って正式版になったら有料になる可能性があるので、
ASP.NET 版にも、Azure で入力したデータを渡したいなぁ〜と思い、ASP.NET アプリの方に データ更新用の Web サービスを追加した。
んで、Azure 側から WCF(サービス参照)で ASP.NET 側にデータの更新(INSERT、UPDATE、DELETE)をしてやる事に。


まず ASP.NET 側は、.NET 2.0 で 通常の Web サービスを作成し、Web サービスを公開する。Azure 側では、公開された Web サービス を Visual Studio のサービス参照を使って、参照の追加を行った。
んで、普通に Web サービスにアクセスしようとすると System.Configuration.ConfigurationErrorsException が発生。コードはこちら。
※ちなみに Visual Studio での Debug 実行環境です。Azure に載せて動かしたわけではないです。

Service1SoapClient client = new Servuce1SoapClient();
try
{
  client.Open();
  client.Insert((maxRowKey + 1).ToString(), entity.Date, entity.GroupingId, entity.UserId, entity.Amount, entity.Remark);
}
finally
{
  client.Close();
}

WCF の プロキシクラス*1 である Service1SoapClient のコンストラクタで例外が発生しました。
引数無しコンストラクタを使うと、config ファイルに書かれてある Binding と EndPoint を使うんですが、Config の 内容にアクセス出来ない様でした。
例外の Message は以下になります。

system.serviceModel/bindings のための構成セクション ハンドラを作成中にエラーが発生しました。: アセンブリは部分的に信頼されている呼び出し元を許可しません。

なんかセキュリティ的にダメなんだと思い、コードで Binding と EndPoint を指定するように変更すると、例外も発生せずに動作しました。
こんな感じ。

Service1SoapClient client = new Service1SoapClient(new BasicHttpBinding(), new EndpointAddress("〜/Service1.asmx"));
try
{
  client.Open();
  client.Insert((maxRowKey + 1).ToString(), entity.Date, entity.GroupingId, entity.UserId, entity.Amount, entity.Remark);
}
finally
{
  client.Close();
}


てことで、config ファイルを使わなければ Azure から 余所の Web サービスへのアクセスも出来そうです。
※環境:ASP.NET アプリはレンタルサーバー上で、Azure アプリは Visual Studio からの Debug 実行。(今晩か明日にでも、Azure にデプロイして試してみます。)
※2009/08/06追記 Azure にデプロイしても動きました。

*1:こんな呼び名であってるんだっけ?