この質問はすでに私が求めていることを尋ねていますが、答えを明確にしたいと思います。
答えは、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