0

サービスを呼び出す単純なGallioユニットテストを使用したWCFサービスがあります。しかし、私はフレームワークの振る舞いに混乱しています。Visual Studioを初めて起動し、単体テストを実行しようとすると、次のエラーが発生します。

System.ServiceModel.EndpointNotFoundException:メッセージを受け入れることができるhttp:// localhost:43671 / MyService.svc/MyServiceをリッスンしているエンドポイントがありませんでした。これは多くの場合、誤ったアドレスまたはSOAPアクションが原因で発生します。詳細については、InnerException(存在する場合)を参照してください。---> System.Net.WebException:リモートサーバーに接続できません---> System.Net.Sockets.SocketException:ターゲットマシンがアクティブに拒否したため、接続できませんでした127.0.0.1:43671 ErrorCode:10061

ただし、単体テストプロジェクトでサービス参照を右クリックして[サービス参照の更新]を実行すると、ポート43671でASP.NET開発サーバーが起動したことを示すポップアップが表示され、単体テストは正常に機能します。

サーバー起動コードを単体テストに追加して、単体テストを実行するたびに「サービス参照を更新」する必要がないようにするにはどうすればよいですか?

ありがとう。

4

2 に答える 2

3

これは、Visual Studio の実行時に WCF サービス ホストが開始されていないために発生します。サービス参照を更新しようとすると、Visual Studio が自動的に WCF サービス ホストを開始し、その後、サービスにアクセスできるようになります。

この問題を解決する 1 つの方法は、IIS でサービスをホストすることです。これにより、VS が実行されていない場合でもサービスにアクセスできるようになります。

他の解決策は、参照 (アセンブリ参照) をサービスに追加し、サービス クラスを直接インスタンス化することです。サービスに対して単体テストを実行するためにサービスを実行する必要はありません。したがって、サービス クラスが呼び出されSomeServiceClassた場合、単体テスト ( SomeServiceClass instance = new SomeServiceClass()) でこのクラスのインスタンスを作成し、それに対してアサートを記述できます (サービスをホストすることさえしません)。

于 2010-09-02T12:58:29.743 に答える
0

ServiceHostを使用してサービスを自己ホストできます。単体テストのスタートアップ コードでこれを使用すると、WCF サービスが単体テストでホストされます。

ホストしている単体テストの app.config がどこにあるのかわかりません。ただし、いつでも別のAppDomainでサービスを実行し、 AppDOmainSetup.ConfigurationFileを設定できます。

于 2010-09-02T13:00:46.993 に答える