5

私はテスト中に電子メールのみを送信するなど、開発環境に異なる方法でメールを送信したいと思います。 webconfigファイルにアプリケーションの値を設定したり、メールを送信する前にURLをチェックしたりすることができます。私はこれを行うためのベストプラクティスを知りたいのですが、それが良くないかもしれないことがわからない他のオプションがある場合は、このトピックに関する情報は非常に高く評価されます。.NETの本番環境か開発環境かを判断する最良の方法

答えて

3

私はPreprocessor Directives (in C#)という名前を使用します。 VBでは、Directivesと呼ばれています。

私はこのようなヘルパーメソッドを持っています。

public static bool IsDebug() 
{ 
    #if DEBUG 
     return true; 
    #else 
     return false; 
    #endif 
} 

次にどこにでもコードに1がこのメソッドを呼び出すと、実行時に、コードはDebug(開発)または場合に実行されている場合、それは教えてあげることができますそれはReleaseバージョン(制作)です。

ここで同等#If...Then...#Else Directives in (VB).

1

の代わりにあなたのコードを変更することだ、なぜあなたはフィールドに対処するために関係なく、あなたにだけメールに開発メールサーバーを設定していませんか?

これを行うコードを書くよりも良いと思われます。

+0

ありがとうございます、私はIISでsmtpを設定できました。メールを送信するのではなく、フォルダに保存するように設定することもできます。 – user1572948

1

まあ、唯一の本番だかを判断することができ、何が開発ですので、web.configファイル内のフラグはOKですが、よりエレガントな解決策は、名前を付けるためにCastle WindsorSpring.Net ALA Dependency Injection(DI)のようなパターン、StructureMapを伴う、となりいくつか。

DIの背後にあるキーコンセプトは、実行時にインスタンス化するクラスに関する情報を動的に提供することによって、実装のバリエーションを切り離し/分離することです。この場合、たとえば、あなたのコードはすべて、「メール」インターフェース(prod環境かdev環境かはわかりません)を扱うように記述され、DIフレームワークを構成して、aのプロダクション版または開発版をインスタンス化しますメール実装クラス。これは、あなたが設定パラメータ値を公開したり増殖したりしていない点で、少し洗練されています。

確かに学習曲線があるので、プロジェクトのこの段階では実行可能ではないかもしれませんが、留意すべきことは間違いありません。

1

IISのweb config inheritanceを使用すると、アプリケーションが展開されているそれぞれの環境からグローバルコンテキスト設定を「継承」できるようになります。 PRODであなたの.NETアプリケーションがインストールされている場所の親ディレクトリで

(例えば/inetpub/wwwroot.web.config、あるいはルートweb.configファイル(\Windows\Microsoft.NET\Framework\ver\web.config)、ご使用の環境固有の設定を追加し、例えば

<appSettings> 
    <add key="sendMailTo" value="" /> 
    <add key="environmentName" value="PROD" /> 
    </appSettings> 

はDEV

<appSettings> 
    <add key="sendMailTo" value="[email protected]" /> 
    <add key="environmentName" value="DEV" /> 
    </appSettings> 

ではこれらの環境のコンテキストの設定はアプリを再デプロイ毎回展開されません。また、他のすべてのアプリは、あなたがyに展開私たちのサーバーはこれらの設定を継承することもできます。

+0

サイト全体のWeb設定値を確認する際にパフォーマンスコストはありますか? – user1572948

+0

@ user1572948 AppSettingsは一度読み込まれキャッシュされますが、それ以上のパフォーマンスの向上は可能です。http://stackoverflow.com/questions/1304897/asp-net-web-config-appsettings-performance – StuartLC

+0

情報をお寄せいただきありがとうございましたキャッシュされていれば、私にとっては問題にならないはずです – user1572948

関連する問題