asmxおよびWCF Webサービスの代わりにMVC Webサービスで作業する用途はありますか? 3つの違いを誰か教えてください。
4 に答える
WCF Web サービスと ASPNET Web サービス (ASMX) については、MSDN から並べて比較できます: Comparing ASP.NET Web Services to WCF Based on Development
MVC アプリケーションを作成している場合は、ASMX と WCF Web サービスの両方を使用できますが、新しい開発には WCF Web サービスを使用することを強くお勧めします。
参考までに、比較に関するより適切なブログは次のとおりだと思います:ASMX Vs WCF
WCF と ASMX
プロトコルのサポート
WCF
- HTTP
- TCP
- 名前付きパイプ
- MSMQ
- カスタム
- UDP
ASMX
- HTTP のみ
ホスティング
ASMX
- IIS の HttpRuntime でのみホストできます。
WCF
- WCF コンポーネントは、コンソール アプリケーション、Windows アプリケーション、IIS など、.NET 3.0 のあらゆる種類の環境でホストできます。
- WCF サービスは、Web サーバーなしでサービスをホストできるため、Web サービスではなく「サービス」として知られています。
- サービスをセルフホスティングすると、HTTP 以外のトランスポートを柔軟に使用できます。
WCF 下位互換性
- WCF の目的は、分散アプリケーションに統一されたプログラミング モデルを提供することです。
- 下位互換性
- WCF は、既存のテクノロジ スタックのすべての機能を利用しながら、それらのいずれにも依存しません。
- これらの以前のテクノロジを使用して構築されたアプリケーションは、WCF がインストールされているシステムで引き続き変更なく動作します。
- 既存のアプリケーションは WCF でアップグレード可能
- 新しい WCF トランザクション アプリケーションは、System.Transactions 上に構築された既存のトランザクション アプリケーションと連携します。
WCF と ASMX の統合
- WCF は WS-* または HTTP バインディングを使用して ASMX ページと通信できます
ASMX の制限:
- ASMX ページでは、トランスポートを介して配信する方法や、特定の種類のセキュリティを使用する方法については説明されていません。これは、WCF が大幅に強化したものです。
- ASMX は HTTP ランタイムと密結合しており、それをホストするために IIS に依存しています。WCF は、.NET Framework 3.0 をホストできる任意の Windows プロセスでホストできます。
- ASMX サービスは呼び出しごとにインスタンス化されますが、WCF は呼び出しごとにシングルトン、プライベート セッションなどのさまざまなインスタンス化オプションを提供することで柔軟性を提供します。
- ASMX は相互運用性への道を提供しますが、エンド ツー エンドのセキュリティや信頼できる通信を提供または保証するものではありません。
私は、.NET / Mono 上で REST ベースのサービスを構築するためのもう 1 つの非常に一般的な選択肢であるServiceStackを維持するコア チームに所属しています。
REST、SOAP、MQ ベースのサービスをサポート
REST ベースのサービスに加えて、同じサービスを再利用して、SOAP と REST ベースの両方のエンドポイントをサポートできます。ServiceStack には、.NET の最速のJSON、JSV、および CSV テキスト シリアライザーも含まれています。これは、 WCF と WebApi に対する利点を比較した以前の回答です。
簡潔で型指定されたエンドツーエンド API
ServiceStack には、JSON、XML、JSV、SOAP 1.1/1.2、および超高速バイナリProtoBufおよびMessagePack形式を含む、サポートされているすべての主要な形式の型付き汎用 ServiceClient も含まれています。
ServiceStack の汎用サービス クライアントは、コード生成なしで、最も簡潔で型指定されたエンド ツー エンドのクライアント/サーバー APIを提供します。
ServiceStack の概要スライド
今年のServiceStack Overview TalkでのMonkeySpaceには、ServiceStack とその利点についての優れた紹介があります。
これは主観的な質問であり、3 の違いに関するものです。WCF はレイヤー間の通信により適しています。asmx は基本的に wcf が登場する前に使用していたものであり、mvc の柔軟性により、多くのシナリオで使用できます。ただし、WCF は OData サービスの実装には優れています。
私は個人的に MVC を使用して、AJAX インタラクション用のクライアント層に Web サービスを実装しており、いくつかのプロジェクトでこれを行っています。利点は、私が別のプロジェクトを持っていないことです。そのため、フロント エンド スタックは軽量で DRY であり、より効率的であり、この方法でコードを整理することは、私にとってより論理的な意味があります。
IMHO wcf はオーバーヘッドが大きすぎ、単純な JSON シリアライゼーションには複雑すぎます。個人的には、n 層アーキテクチャ サイトで WCF の代わりに MVC を使用する場合があると思います。
この記事では、悪名高い NerdDinnerd プロジェクトnerd dinner restでこれを使用する方法について説明します。
OpenRasta などのいくつかのフレームワークがありますが、標準の mvc.net ツールで十分であることがわかりました。
また、haacked による良い記事: haacked.com
ASMX を介した WCF のメリットに関するここでの他の投稿をトップにすることはできません。それはソース (Microsoft) からのものであり、MVC Web API について言及していないため、その投稿に追加するものです。これは... あなたの質問は、解決しようとしている問題によって異なります。メッセージング、メッセージ キュー、または下位レベルの tcp/ip を実行しようとしている場合でも、WCF になります。
私は現代の世界のプログラマーであり、彼らが来るのと同じくらい怠惰です.. ASMX と WCF の両方のテクノロジは、私には少し古くなっているように感じ始めています。慣れ親しんだ方法であれば、おそらく自然に感じるでしょう。
私はタイプ セーフが好きで、魔法の文字列が嫌いで、さらに大きな XML を掘り下げるのが嫌いです。私の考えでは、これが実行時エラーのパスです。
MVC フレームワークを使用して Web アプリケーションを作成したことがある場合は、mvc webapi を使用するための学習曲線はほとんどありません。
ルート、モデル、コントローラーなどの標準的なものはすべて、まったく同じ方法で適用されます。すべての HTTP 動詞は使用するためにあります...
最小限の労力で、すべてのルートとコントローラーを完全にタイプセーフな方法 (文字列なし) で使用できるため、壊れているとおそらくコンパイルされません....
また、ServiceContract を単体テストするよりも、コントローラーを実行する単体テストを作成する方がはるかに簡単です。
確かではありませんが、上記と同じ理由で、MVC ルートが WCF よりも IoC/DI に適していると思いますが、それについては間違っていると思います。
私が偏見を持っていると言えますか。