0

この質問は、以前に尋ねられた質問のフォローアップです:リンク

.NET/C# で Windows サービスを開発する必要があります。サービスは、VB6 で記述されたアプリケーションによって使用される必要があります。このサービスは、スケジュールされたタスクを処理するために Quartz.NET を実装し、VB6 アプリケーションによって開始される関数を開始できるようにリスナーを実装する必要があります。

VB6 チームの要件は、Winsock を使用できることです。そのため、ソケットとリスナーを使用する必要があります。問題は、私がその経験がないことです。私はどちらかというと WCF 派です。

これが要件に適合するかどうかを確認するために、現在 TcpListener クラスを調べています。

私の最初の質問: TcpListener クラスを実装した場合、VB6 チームは、VB6 を使用することの短所 (データ構造やバイナリ形式など) を念頭に置いて、サービスを利用できますか?

2 番目の質問: VB6 アプリケーションで 3 つの関数を使用できる必要があり、1 つのリスナーが作成されたとします。これを実装するためのベストプラクティスは何ですか?

繰り返しますが、アドバイスをいただければ幸いです。

4

1 に答える 1

1

ペイロードをXML、テキストのキー/値ペア、JSON、またはその他の緩いシリアル化形式として渡すと、プロトコルの将来性を保証するのに役立ちます。これにより、新しいオプションのメソッド引数を自由に使用したり、サーバーエンドに追加したりすることができます。

「メソッド」フィールドに加えて、「プロトコルバージョン」フィールドを持つことができます。重大な変更(新しい必要な引数、既存の引数タイプの変更など)が行われると、バージョン番号を使用して、移行期間(数年にわたる場合があります)中に古いクライアントと新しいクライアントの両方を処理できます。

TCPストリームの上にメッセージフレーミングを提供する限り、ある種の単純なEOM区切り文字、またはバイナリまたはテキスト長のプレフィックスを含むメッセージヘッダーを使用できます。

名前付きパイプも検討してください。 TransactNamedPipe()は、VB6プログラムから呼び出すのはかなり簡単です。これにより、メッセージ境界の問題が処理されます。非同期の送受信ではなく、RPCスタイルのプロトコルが必要であると想定しています。

または、最後まで行ってMSMQを使用することもできます。プライベートマシンキューは、大規模な管理を必要としません。しかし、VB6と.Netの両方が優れたMSMQサポートを持っているとしても、ほとんどの開発者はそれについてほとんど知りません。

于 2012-12-04T14:59:25.083 に答える