いままで、AzureでWCFな郵便番号検索サービスつくるぜ!と、ちまちま作ってきましたが、
今回はAzure無視で行きます!
理由?
今まで散々失敗してきたから…
まずは…普通のWCFサービス作ろう!
…かなり退化しているがキニシナイ。
■WCFプロジェクトの作成
VisualStudio(2010)で、「WCF サービス アプリケーション」プロジェクトを作ります。
そして、デフォルトで作られる Service1.svc たちは速攻で亡き者にします。
■AJAX 対応 WCF サービス作成 (GET)
前回、普通のWCFサービスを試したため、
今回はちょっと先に進むべく、『AJAX 対応 WCF サービス』 なんてものを使ってみます。
しかも、GETで取得できるものを…
サービスの内容はこんな感じにコーディング
[WcfTestService.svc]
namespace WcfTestService {
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class WcfTestService {
[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json)]
public string HelloWorld(string name) {
return "こんにちは、" + name + "さん。";
}
}
}
WebGet(ResponseFormat=WebMessageFormat.Json) とすることで、GETで取得できるようだ(JSON形式)。
そしておもむろに実行

なんか出た。
「WCF テスト クライアント」 には別に用はないため、閉じ。
ブラウザ (Chrom) を開いて…
URLは、http://localhost:49652/WcfTestService.svc/HelloWorld?name=YAMADA と入力…

幸先よさそうだ。
■[?name=YAMADA] がかっこ悪い
クエリ文字列は今ではかっこ悪い?ので、[HelloWorld/YAMADA] で呼べるようにしてみる。
プログラムを変更してみる
[WcfTestService.svc WcfTestService.HelloWorld メソッド]
[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json, UriTemplate="HelloWorld/{name}")]
public string HelloWorld(string name) {
return "こんにちは、" + name + "さん。";
}
そして実行→ブラウザでアクセス (http://localhost:49652/WcfTestService.svc/HelloWorld/YAMADA)

シボンヌ。
エラーメッセージ的に、エンドポイントの設定を変えてあげればいいようだ。
ということで、いろいろと調べてみて、Web.config を編集してみた。
[Web.config]
<behavior name="WcfTestService.WcfTestServiceAspNetAjaxBehavior">
<!-- UriTemplate を使用する場合、<enableWebScript/>ではなく、<webHttp/>に変更するみたい -->
<!-- 削除 -->
<!-- <enableWebScript /> -->
<!-- 追加 -->
<webHttp />
</behavior>
そして実行…

やばい…調子よすぎる…
■[.svc] がかっこ悪いです。
URLに 「~.svc/~」 の .svc が非常にかっこ悪いし気持ち悪い。
これを何とかするために試行錯誤…
・Web.config の endpoint をいじってみる
<endpoint address="" をいじってみたが、どうやってもできなかった…
・サービスを起動するプログラムを作る
エンドポイントを指定して起動させるといいみたい…メンドクサイ…
なので、試しませんでした。
・MVCなどのルーティングを使用してみる
Global.asax で、RouteTable なんたらかんたらと記述すると、できるようだ。
(最近ASPで使ってみた)
内容はこんな感じ。
[Global.asax]
protected void Application_Start(object sender, EventArgs e) {
RouteTable.Routes.Add(
new ServiceRoute("WcfTestService", new WebServiceHostFactory(), typeof(WcfTestService)));
}
そして起動…(http://localhost:49652/WcfTestService/HelloWorld/YAMADA)

これ超楽や…
今回はAzureに全く関係なかったけど、まあ結果でたからOK。