この質問はすでに私が求めていることを尋ねていますが、答えを明確にしたいと思います。
答えは、WebGetとWebInvokeは似ており、主な違いはMethodパラメーターであると述べています。
しかし、Methodパラメータが に設定されて"GET"いる場合、実際には機能的に同等ですか、それとも他の違いはありますか?
それらは単なるマーカー属性であり、最終的には機能的に 100% 同等になります。これらの属性を解釈する唯一のものはWebHttpBehavior::GetWebMethodメソッドであり、その機能は単純です:
internal static string GetWebMethod(OperationDescription od)
{
WebGetAttribute webGetAttribute = od.Behaviors.Find<WebGetAttribute>();
WebInvokeAttribute webInvokeAttribute = od.Behaviors.Find<WebInvokeAttribute>();
WebHttpBehavior.EnsureOk(webGetAttribute, webInvokeAttribute, od);
if (webGetAttribute != null)
{
return "GET";
}
if (webInvokeAttribute == null)
{
return "POST";
}
return webInvokeAttribute.Method ?? "POST";
}
そうではない。
thisおよび thisサンプルに基づいて MessageFormatter を使用して、WCF DataContractJsonSerializer を Newtonsoft JsonSerializer に置き換えるために数時間を費やしました
WebGet(難しい方法で) と の使用に違いがあることがわかりましたWebInvoke(Method="GET")。
WebInvokeリクエストは WCF スタックの別のパイプラインを通過し、予想されるメッセージを逆シリアル化しようとします (メソッドがIDispatchMessageFormatter.DeserializeRequest()呼び出されます) WebGet。
得られた教訓:運用WebGetへの使用GET