2

VB6で構築されたEPOSシステムがあります。クライアントは Microsoft Dynamics AX を CRM システムとして使用しています。サード パーティがクライアント用の AX 実装を作成し、EPOS と AX CRM の間でデータを同期するために使用する必要がある一連の WCF Web サービスを公開しました。VB6 では WCF サービスの呼び出しに問題があることがわかっていたので、EPOS と AX CRM 間の通信を処理する次のコンポーネントを作成しました。

呼び出す VB6 EPOS -->
1) 呼び出す VB6 DLL ラッパー... -->
2) 呼び出す .NET(3.5) COM Callable Proxy DLL ラッパー... -->
3) .NET(3.5) Web サービス ハンドラ(Web サービスが実際に呼び出される場所) -->
Microsoft Dynamics AX CRM。

テスト コンソール アプリがコンポーネント 2 を呼び出すように、VB6 からの呼び出しをシミュレートしてデバッグを支援するために、Vb.NET でテスト コンソール アプリを作成しました。

これを行っている間、次の例外が発生しました:-

"(servicemodel クライアント構成セクションでコントラクト 'X' を参照するデフォルトのエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、このコントラクトに一致するエンドポイント要素がクライアント要素で見つからなかったためである可能性があります。 )"

グーグルで検索したところ、バインディングとエンドポイントのセクションをコンポーネント 3 の app.config からテスト コンソール アプリの新しい app.config にコピーする必要があることがわかりました。私は WCF を知らず、現時点では時間もありません。なぜこれがこのエラーを修正したのかを理解するまで、実際にそれを学びます。

ただし、VB6 EPOS からサービスを呼び出そうとすると、このエラーが再び表示されます。したがって、コンポーネント 2 はチェーン内の最初の .NET(3.5) コンポーネントであるため、エンドポイント宣言が必要な場所であると考えて、コンポーネント 2 に app.config を追加しましたが、いいえ。エラーはまだポップアップしています。

誰にもアイデアはありますか?シンプルトンのためにこれに光を当てることができるプログラミングヒーローはいますか??? EPOS を書き直さない理由を聞かないでください。私達はします。まだです。そこには 300 万行を超えるスパゲッティ コードがあり、私は 8 か月しか取り組んでいません!!!

余談ですが、このシナリオは OOP の黄金律の 1 つ、つまりカプセル化に違反していませんか。コンポーネント 3 が WCF サービスにアクセスするために使用するエンドポイントを VB6 EPOS が知る必要があるのはなぜですか?

4

1 に答える 1

1

ここで素晴らしい質問...

あなたの問題は、基本的に、WCF サービスを操作するために必要なすべての構成データから発生しています。

.NET Windows または Web アプリケーションを扱う場合、WCF サービスのクライアント側とサーバー側の両方の構成データは、アプリケーション構成ファイルに存在します。Windows アプリケーションの場合、このファイルは app.config になりますが、Web アプリケーションの場合は web.config になります。

あなたのケースでは、プロキシ ロジックを何らかの形式の COM 可視 .dll に入れたいと考えています。

これはあなたを苦しめます... .NET プラットフォームでは、最上位のホスト アプリケーション (Web または Windows) の .config ファイルは、すべての構成データが読み取られる場所です。アプリケーションが多数の .NET アセンブリ (それぞれにカスタム構成が必要) を利用している場合でも、ランタイムは、それらの構成要素がすべて最上位のアプリケーション構成ファイルに存在することを期待します。

問題を解決するには、VB6 がアクセスできるサービス (ASMX Web サービスと考えてください) と通信し、そのサービスに通話を適切な WCF サービスに転送させる必要があります。

もう 1 つの方法は、構成変数を VB6 アプリケーションから Com-visible アセンブリに直接渡すことです。これにより、WCF の拡張モデルを使用して、渡された構成でプロキシを作成できます (ファイルから構成データを読み取る既定の動作をオーバーライドします)。 .

後者のシナリオは、SOA/OOP の違反である限り、両方の方向に進む可能性があると言えます..状況に応じて、VB6 アプリケーションが (最終) WCF エンドポイント

于 2011-09-30T11:44:44.463 に答える