RESTful WCF サーバーを作成する理由は多数あり (簡単です)、ASP とセキュリティ ボックスを回避できれば (情報を返すための単純な要求だけを行っている場合)、さらに優れています。これを行う方法については、http : //msdn.microsoft.com/en-us/library/ms750530.aspxを参照してください。
私が見つけたのは、AJAX (JQUERY) GET リクエストの処理が簡単だということです。しかし、POST で JSON を処理するのは注意が必要です。
以下は、単純な GET リクエスト コントラクトの例です。
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
String Version();
そして実装はこちらです(JSONを返します)
public partial class CatalogService : ICatalogService
{
public String Version()
{
mon.IsActive = true;
this.BypassCrossDomain();
ViewModel.myself.TransactionCount++;
return ViewModel.myself.VersionString;
}
}
ああ、しかし、JSON を POST したい場合はどうでしょう。スタック オーバーフローに関する多くの記事が見つかります。これだけでよいことがわかります。
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
BuildResponse BuildToby(BuildRequest request);
これは JSON メッセージを受け取り、Plain .NET オブジェクト (PONO) にデシリアライズして、それを操作できるようにします。実際、Fiddler でリクエストを作成したとき、これはうまくいきました。
POST /BuildToby HTTP/1.1
User-Agent: Fiddler
Content-Type: application/json
Host: localhost:4326
Content-Length: 1999
ただし、JQUERY 1.8 で次の AJAX を使用すると、驚くべきことがわかります。
「application/json」の content-type を指定することで、www-url で囲まれた投稿メッセージ以外のものを POST できるかどうかを確認するためにブラウザによって開始される「プリフライト」チェックがあることがわかります。(これについては、スタック オーバーフローに注意事項があります)。
var request = JSON.stringify({ FrameList: ExportData.buildList });
var jqxhr = $.ajax({
type: "POST",
url: "http://localhost:4326/BuildToby",
data: request,
contentType: "application/json; charset=utf-8",
dataType: "json"
});
そして、フィドラーが報告するものは次のとおりです(これは POST メッセージではなく、OPTIONS メッセージであることに注意してください)。
OPTIONS http://localhost:4326/BuildToby HTTP/1.1
Host: localhost:4326
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: http://ysg4206
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
ブラウザ (この場合は Firefox) は、(このコンテンツ タイプの) POST が許可されているかどうかを確認するために、OPTIONS HTTP メッセージを使用してサーバーに追加の呼び出しを行う必要があります。
これを修正するためのすべての記事は、GLOBAL.ASAX の編集に関するもので、ASP.NET を使用している場合は問題ありませんが、セルフホスト WCF を使用している場合は役に立ちません。
これで質問が表示されました (長くなって申し訳ありませんが、他の人が結果を追跡できるように、これを完全な記事にしたかったのです)。