0

コンテクスト

.NET Stackを使用して、アプリケーションをエンドツーエンドで開発しました。したがって、次のようなものを管理しているとしましょう。

WPFクライアント<=>Webサービス:

  1. 開発)プレーンリファレンス(IISに展開されていないVS内のWCFサービスプロジェクトへの直接呼び出し)
  2. 本番環境)リモートWebサービス[IIS @リモートサーバー、接続するにはVPNが必要]

Webサービス<=>データベース:

  1. 開発)SQLServerExpressローカルDB[@開発マシン]
  2. 本番)SQL Server DB [@本番サーバー、WSと同じ]

「手動の方法、正しい方法」(http://www.code-magazine.com/Article.aspx?quickid=0809101)を実装していることに注意してください。したがって、個別の契約/クライアントプロキシなど...

質問

前に説明したようなセットアップをエレガントな方法で取得するにはどうすればよいですか?つまり、web.config変換を使用して、デバッグとリリースの間で接続文字列を切り替えることができるため、Webサービス<=>データベースは簡単です。しかし、どうすれば「接続」をクライアントアプリからWebサービスに自動的に切り替えることができますか?

本番環境では、プロキシへの参照を使用し、app.configファイルにエンドポイントを記述しています。開発では、Webサービス自体への単純な参照が必要になると思います。[デバッグ/リリース構成間の参照を追加/削除する必要がありますか?はいの場合、これをプログラムでどのように達成できますか?...私は完全に失われました]。

お時間をいただきありがとうございます!;)

編集:

@AlexanderBalteが示唆しているように、開発動作はメソッドの直接呼び出しにすぎません。メインの開発マシンにアプリサーバーがありません。

4

2 に答える 2

1

prthrokzがコメントしたように、エンドポイントを切り替えるだけです。条件付きコンパイル シンボルの使用は、可能な限り単純です (ただし、単純ではありません)。

    WCFServiceClient client = new WCFServiceClient();
#if DEBUG
    client.Endpoint.Address = new EndpointAddress(new Uri("http://devSrv/WCFService.svc"));
    client.Endpoint.Name = "Dev";
#else
    client.Endpoint.Address = new EndpointAddress(new Uri("http://prodSrv/WCFService.svc"));
    client.Endpoint.Name = "Prod";
#endif
于 2013-01-09T20:25:49.200 に答える
0

私が理解しているように、開発動作はメソッドの直接呼び出しであり、本番動作は生成されたプロキシを介した Web サービスとの対話です。

それぞれ、開発と本番では異なるクラスを使用していますが、同様のメソッド セットを使用しています。

おそらく、Web サービスが持っているようなメソッドの正確なセットを持つ別のプロキシ インターフェイスを作成する必要があります。このインターフェースには 2 つの実装があります。1 つはダイレクト メソッド呼び出しをプロキシするためのもので、もう 1 つは Web サービス メソッド呼び出しです。

Factoryまた、 app.config の構成に応じて、プロキシ インターフェイスの具体的な実装を提供するクラスを作成する必要があります。

于 2013-01-10T08:46:19.023 に答える