2012-04-18 8 views
5

現在、バックグラウンドで実行されているWindowsサービスとローカルクライアントまたはリモートクライアント(通常は1〜3回のみ)で構成される.NET 4アプリケーションがあります。堅牢な自己ホスティングサーバーのための最良の選択:WCF vs. ASP.NET Web Api

クライアントにはWPF GUIがあり、Windowsサービスからのデータが必要です。したがって、ローカルクライアントにはNamedPipeバインディングを使用し、リモートクライアントにはNetTcpバインディングを使用してWCFを使用します。これはうまくいきますが、エンドポイントに到達できない(チャンネルがフォルトされているか見つからないなど)エンドポイントに問題があることがよくあります。私たちはすでに間違った接続を再構築しようとしていますが、かなり壊れやすいと思われます...

Webに入ります。HTTPベースのスタックがより堅牢であるように見えます(チャネルもエンドポイントもなく、 Windowsサービスも同様)。各リクエストは個別に処理されるため、チャンネルが壊れても問題はないようです。したがって何かが失敗した場合は、リクエストを繰り返すだけです。 (そして、私たちは他のアプリからASP.NET MVCの経験があるので、これは私たちには新しいことではありません)。

今、私たちは何が最善の策だろうと考えています。既存のWCFサービス(約15の操作で1つのサービスインターフェイス)を強化するか、Web Apiにインターフェイスを移動してHTTPリクエスト(JSONデータを使用)として実行する方が良いでしょうか?ここでのパフォーマンスは私たちの主な問題ではありません...

アイデア? ハートムット

答えて

4

Web APIに移行するのではなく、WPFアプリケーション用のWCF(SOAP)サービスを利用することをお勧めします。これにはいくつかの理由があります。まず、新しいWeb APIが対処しようとしていること、つまりRESTful/HTTP /ハイパーメディアサービスをサポートするためのフレームワークを提供することを検討する必要があると思います。これは、(プラットフォームに関係なく)サービスの "リーチ"や相互運用性を最大限にしたい、Web、モバイル、JavaScriptアプリケーションなど、HTTPを多用するアプリケーションを構築するのに適しています。これは、WPFクライアントには使用できないが、すべてのトラフィックがドメインに対してローカルな場合は、現在の実装に固執するほうが理にかなっています。

あなたのサービス/クライアント用に作成したバインディングの選択肢は私には分かりません。私はあなたのチャンネルがなぜ失敗しているのかに焦点を当て、これらの問題に取り組んでいます。また、IIS経由でサービスをホストし、WASを使用してHTTP以外のエンドポイントを公開することを検討することもできます。私は過去にこれで多くの成功を収めており、大部分はかなり安定していました。また、自分のホストを管理して頭痛のいくつかを取り除きます。 TCPバインディングフォールトが心配な場合は、新しいHTTPまたはwsHTTPエンドポイントを作成して代わりに使用してください。これにより、プログラミングモデルを変更することなく、Web APIが使用するのとまったく同じトランスポートが提供されます。

+0

もしあなたが私たちを更新してもらえますか?自己ホストWebAPIは自己ホストWCFよりも良い選択です。 –

関連する問題