0

ASP.NET MVC アプリケーションから特定の機能に対して呼び出される WCF サービスがいくつかあります。

  1. MVC アプリは Contract-Service (WCF サービス) を呼び出します
  2. Contract-Buy-Service (WCF サービス) 呼び出しの処理中の Contract-Service
  3. Contract-Buy-Service が SAM-Utility-Service (WCF サービス) を呼び出す

Contract-Buy-Service から TDD テスト ケースを実行すると、問題なく動作します。コールが Contract-Buy-Service から SAM-Utility-Service に移動するためです。しかし、Contract-Service => Contract-Buy-Service => SAM-Utility-Service から呼び出しが行われると、SAM-Utility-Service のエンドポイントが構成に見つからないというエラーが常に表示されます。

contract-buy-service と contract-service の両方に、SAM-Utility-Service のサービス リファレンスがあります。サービスがホストされ、稼働中であることを確認しました。ブラウザーで表示しようとすると、WSDL を取得できます。

サービス呼び出しが複数のレイヤーを通過しない理由、またはここで何か間違ったことをしている理由を教えてもらえますか?

ありがとう!

4

1 に答える 1

0

まず、Contract-Service にサービス リファレンスや SAM-Utility-Service の知識は必要ないと思います。他の操作のためにそのサービスと直接通信する必要がない限り (その場合はとにかく別のサービス エンドポイントをお勧めします)、Contract-Buy-Service が何をしているかを知る必要はありません。これにより、サービスの結合がより緊密になり、サービス指向の主な利点の 1 つが失われます。

問題の原因はいくつか考えられます (WCF では常にそうであるように)。ただし、これと同様の問題が、トランザクションの選択の誤り、不適切な使用、またはミスアライメントによって引き起こされました。

たとえば、Contract-Service と Contract-Buy-Service がトランザクションに参加しているとします。SAM-Utility-Service もトランザクションを必要とする場合がありますが、新しいトランザクションが必要です。この 2 番目のトランザクションが最初のトランザクションに正しく参加していない場合、最初のトランザクションはコミットを許可しないか、それ自体をコミットしない可能性があります。

最初のステップの 1 つは、3 つすべてをトランザクションなしで連携させることです。

于 2011-09-13T23:18:04.960 に答える