0

私は、後で実際の使用法を学び、拡張するための小さなクラウド プラットフォームを作成し始めています。私はWCFでC#を使用しています。私の考えは、サーバーと実行システムを用意することです。サーバーには、ユーザーが送信したジョブがあります。エグゼキュータ システムは、サーバーにジョブを要求し、ジョブを実行して、結果をサーバーに更新します。execute()ジョブは、executor によって呼び出されるメソッドを持つ C# クラス オブジェクトです。

私の問題は、オブジェクトをそのメソッド (動作) と共に Executor に引き渡して、Executor がそれを実行する方法です。オブジェクトをシリアル化すると、データのみが送信されます。Utilifyのようなクラウド フレームワークがどのように達成できるのか疑問に思っています。私は WCF の方が好きですが、リモート システムでジョブを実行するための C# テクノロジを受け入れます。

4

2 に答える 2

0

本当にこれを行いたい場合は、ジョブが定義されているアセンブリのバイナリ表現を Executor に何らかの方法で送信し、それを AppDomain にロードしてコードを実行する必要があります。

var tempDomain = AppDomain.CreateDomain(someDomain);
tempDomain.Load(myTransmittedAssemblyBytes);

セキュリティの脆弱性の全世界を作成することに注意してください! ロードしているコードが信頼できることを確認してください。

または、Executor に、処理できるジョブの種類を通知させ、何をすべきかわかっているデータのみを送信してもらいませんか。

于 2012-07-27T12:16:02.443 に答える
0

バイナリ シリアル化方法はお勧めしません。バイナリ実行可能コードをワーカー サーバーに送信するシステムを試してみました。それは不可能であるか、ほとんど実用的ではありませんでした - (実行するコードがたくさんある場合を想像してください。実行するたびにそのすべてのコードをネットワーク経由で送信するのは実用的ですか?コードをローカルに保存して、ネットワーク経由で変数を送信するだけです)。

メモリから:問題は、アセンブリバイトを呼び出し可能なクラスに逆シリアル化/デコードすることにあったと思います.execute()。理論的には、呼び出された親クラスにキャストしてMyAction呼び出すことができます.execute()が、実際にはこれは機能しませんでした。

バートレットが提案した別の方法に同意します。「ワーカー サーバー」はActionsICanProcess.dll、照会されたときに「ジョブ配布サーバー」が処理できるコマンドを伝えることができる のバージョンを格納する必要があります。「ワーカー サーバー」を新しいジョブ定義で更新するには、新しい「ActionsICanProcess.dll」を各「ワーカー サーバー」に転送するだけです。

于 2012-07-27T14:04:19.087 に答える