.NET Remotingは本当に非推奨ですか?


95

誰もが.NET RemotingがWCFに置き換えられていると言っていますが、それがどれほど正確か疑問に思っています。Remotingが廃止されるという公式の言葉は見たことがありません。また、RemotingがWCFよりも理にかなっているシナリオは確かにあるようです。フレームワークのバージョン4.0であっても、Remoting関連のオブジェクトやメソッドは廃止されていません。3.5および4.0フレームワークのSystem.AddInがRemotingを使用することも私の理解です。

反対に公式の言葉はありますか?

記事「.NETでの通信オプションの選択(3.0の場合、それはその記事の最新バージョンであるため)」では、次のように述べています。

8クロスアプリケーションドメイン通信

同じプロセス内の異なるアプリケーションドメインにあるオブジェクト間の通信をサポートする必要がある場合は、.NETリモート処理を使用する必要があります。

もちろん、WCFは確かにアプリドメインの境界を越えるために使用できるため、これは正確ではありませんが、そのシナリオに対する公式の推奨事項ですか?

更新:私はClemens Vasters(RemotingとWCFを所有するチームに属していた)に次の質問を送信しました。

クレメンス、あなたがリモーティングとwcfの両方を所有するチームに所属していることを理解しています。また、ソースに移動する必要があると思う質問がいくつかあります。

最初に、リモート処理がなくなるかどうかについて質問があります。具体的には、プロセス内のアプリドメイン間通信でリモート処理を広範囲に使用するかなり大きなアプリケーションがあり、このリモート処理の使用が「レガシー」と見なされているのかと思いました。もしそうなら、AppDomain.CreateInstanceと友達は他のもので置き換えられますか?

これは彼の返事です:

リモート処理は.Net Frameworkの一部であるため、廃止されません。COMは、Windows NT 3.5 / Windows 95以降Windowsに組み込まれており、なくなっていないため、すぐになくなることもありません。

とはいえ、Remotingへの開発投資はごくわずかです。WCFはRemotingの後継であり、マネージコードのCOM / DCOMの後継です。

インプロセスのアプリドメイン間通信の場合、リモート処理はCLRのネイティブな通信方法です。大量のデータまたは非常に多くのメッセージを短時間でポンプするパフォーマンスの問題が発生している場合は、WCFとNetNamedPipeBindingを真剣に検討する必要があります。


1
私の特定の状況でWCFがRemotingよりもはるかに遅い理由に関する質問については、stackoverflow.com / questions / 1295353 /…を参照してください。
マーク・

1
リモーティングは.NETに固有のものであり、リモーティングが果たす役割とその動作の詳細は、ドンボックスとクリスセルズによるEssential .NETにあります。ただし、コンポーネント間の通信の信頼性が低いか遅い場合はバラバラになり、実質的にすべてのトランスポート(ギガビットLANでさえ)は、インプロセスメッセージングに比べて信頼性が低く低速です。人々がWCFが遅いと話すとき、彼らは通常Webサービスを考えています。インプロセス通信にWebサービスを使用しようとすると、Webサービス遅くなります。ただし、これらは低速で信頼性の低い接続を許容するように設計されており、これらの状況で適切に機能します。
Peter Wone、2011年

3
@ピーター:情報に感謝しますが、あなたの仮定のいくつかは完全に間違っています。1つは、リモート処理が遅いか信頼性が低いことです。そうではありません。それは非常に高速で、非常に信頼性があります(もちろん、信頼性の高いチャネルを介して)。もう1つは、「Webサービス」(それが何であれ)が遅いということです。そうではありません。もちろん、進行中の処理はネットワークを介した処理よりもはるかに高速になりますが、これはこの質問の内容ではありません...
Mark

回答:


54

それをレガシー技術と呼ぶほうがより正確な説明です。

http://msdn.microsoft.com/en-us/library/72x4h507%28VS.85%29.aspx

このトピックは、既存のアプリケーションとの下位互換性のために保持されているレガシーテクノロジーに固有のものであり、新しい開発にはお勧めできません。分散アプリケーションは、Windows Communication Foundation(WCF)を使用して開発する必要があります。

更新:WCFは、inter / intra / process / inter / intra-appdomainを区別しません。WCFで単一マシン通信を使用している場合は、名前付きパイプを使用します。これを使用すると、事実上すべての現実的なシナリオで良好なパフォーマンスが得られます。

さまざまな分散通信テクノロジーのパフォーマンス比較については、こちらを参照してください


その記事は、特にプロセス間通信でのリモート処理の使用について言及していませんか?リモーティングはまだアプリドメイン間通信(AppDomain.CreateInstanceFromAndUnwrapとその仲間たち)で活躍しているようです。
マーク・

はい、そうです。これらのクラスが「非推奨」の場合、ObsoleteAttributeがそれらに適用されます-msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx
RichardOD 2009

2
@ Mark、@ RichardOD:記事は.NET Remotingの主な記事です。それはプロセス間通信だけを指すのではありません。また、Remoting(およびASMX Webサービス)を「レガシー」としてアナウンスする決定は.NET 3.5 RTMの後で行われたため、.NET 3.5でObsoleteAttributeがそれらにないという事実は何の意味もありません。
ジョンサンダース、

@John:4.0でも[廃止]とマークされていません(少なくともまだ)。
マーク

@Mark:あなたは4.0 ベータ 1 を意味します
ジョン・サンダース

11

はい。リモーティングは非推奨です...そしてそれはマイクロソフトからの公式です。ここにリンクがあります:

.NETリモーティング

記事の最初の行は太字で示しています。

このトピックは、既存のアプリケーションとの下位互換性のために保持されているレガシーテクノロジーに固有のものであり、新しい開発にはお勧めできません。分散アプリケーションは、Windows Communication Foundation(WCF)を使用して開発する必要があります。

言い回しは「非推奨」だと思ったが、どうやら彼らはそれを「レガシー」と呼んでいる


21
IMOは「非推奨」が「レガシー」よりも強力です。「レガシー」は「開始しない」を意味し、非推奨は「すでに開始している場合は、将来のバージョンで完全に削除される可能性があるため、今すぐ停止してください」を意味します。
ChrisW、2009

1
@マーク:私はそれをそのように読みません。WCFは、Remotingと同様にプロセス内通信に適用できるようです(WCFのNetNamedPipeBindingを参照)。
Michael Petrotta、

1
@Mark:とにかく、Remotingは非推奨です。@ChrisW:Remotingが近い将来に削除されることはないと思いますが、バグ修正があるとすれば少なく、サポートがあるとすれば少ないと予想できます。
John Saunders、

1
@マーク-あなたの本当の質問は何ですか?リモーティングはレガシー技術と見なされています。それが本当であることを望まないようです。正当な理由があるかもしれませんが、それはマイクロソフトの現在の推奨事項を実際に語るものではありません。
Michael Petrotta、

1
@ジョン:私はそうだと思います。私は特に(AppDomain.CreateInstanceFromAndUnwrapなどを使用して)プロセス内のアプリドメイン間通信を行っており、WCFを使用してこれをきれいに(または高性能に)行う方法がわかりません。代わりにWCFを使用できて嬉しいです(他のシナリオでもよく使用します)が、このため、希望どおりに機能させるのに苦労しています。その特定のシナリオについて別の質問を投稿します。
マーク

6

.NET Coreに移行したい場合は、とにかくRemotingの別のソリューションを見つける必要があります。

.NET Remotingは問題のあるアーキテクチャとして識別されました。AppDomain間通信に使用され、サポートされなくなりました。また、Remotingはランタイムサポートを必要とします。これは維持にコストがかかります。これらの理由により、.NET Remotingは.NET Coreではサポートされておらず、将来サポートを追加する予定はありません。

ソース:https : //docs.microsoft.com/en-us/dotnet/core/porting/libraries#remoting


1
ここでは、.NET Coreで利用可能な代替策についての議論を見つけることができます:github.com/dotnet/corefx/issues/18394
Jean-Claude


2

Microsoft .NET Service Bus(つまりRemotingとWCFの両方を意味します)のテクニカルリードであるClemens Vastersが、このフォーラム投稿でWCFとRemotingについて話し合っています。投稿を要約すると、彼は結局リモーティングよりもWCFを推奨することになります。

.NET 4.0が内部でリモート処理を使用しているかどうかはわかりませんが、クレメンスに質問を送信してみてください...彼が答えを知っていると確信しています。


11
マイクロソフトの従業員は、標準のどのような形式よりも、新しい光沢のある新しい互換性のないすべてのメソッドの使用を推奨していますか?ショッキング。
クイルブレーカー、2009

14
WCFは他のすべてと互換性がないのですか?そして、リモーティングは何と互換性がありましたか?
ジョンサンダース

2
互換性を求めている場合は、WCFが唯一の選択肢です(もちろん、asmxを除きますが、それは「レガシー」でもあります)。リモート処理は、互換性が必要なシナリオには適していませんでした。
マーク・

3
私はあなたの提案を受け入れて、クレメンスに尋ねました。彼の回答:「リモート処理は.Net Frameworkの一部であり、そのため廃止されることはありません...インプロセスのアプリドメイン間通信では、リモート処理はCLRのネイティブな通信方法です。」
マーク

1
彼はさらに、「WCFとNetNamedPipeBindingを真剣に検討する必要がある」と述べています。
ジョンサンダース

2

今(2015年)は、クロスアプリケーションドメインでもかなり明確であると思います:https : //msdn.microsoft.com/en-us/library/vstudio/ms180984(v=vs.100).aspx

AppDomain間のリモート処理 このトピックは、既存のアプリケーションとの下位互換性のために保持されているレガシーテクノロジに固有であり、新規開発にはお勧めしません。分散アプリケーションは、Windows Communication Foundation(WCF)を使用して開発する必要があります。

次に、クロスアプリケーションドメインにもWCFを使用する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.