2011-07-30 6 views
1

azさんにウェブアプリをコード化して質問しています。 メールを送信する前に書いたクラスライブラリを使用しています。 xlstファイルと電子メールを送信するたびに、電子メールに含める情報を持つオブジェクトを作成し、そのオブジェクトをxmlにシリアル化し、xlstファイルを使用してhtml形式の電子メールに変換します。Windows Azureでxlstファイルへのパスを解決する

これは私のためにうまくいきました。私はAzureウェブアプリケーションで使いたいと思います。私が持っている質問は、どのようにxlstファイルを見つけることができるのですか?プロパティタブで「コンテンツ」としてマークする必要がありますか?どうすればそれにアクセスできますか?事前に

おかげで、 フアン

答えて

1

smarxが既に指摘したように、Server.MapPathは、ファイルをdeploy時にアップロードしておいて、アプリケーションによって変更されていない場合には動作します(これはおそらく通常のWebアプリケーションでやっていることでしょう)。

このアプリケーションでは、dependency injectionを使用してこの問題を解決しています。クラスライブラリでは、インタフェースを定義します。実装なしのITemplateRepositoryあなたがクラスライブラリを必要とするプロジェクトでは、そのインタフェースの実装を作成します。これはWebアプリケーション内にあるため、安全にServer.MapPathを使用するか、Azureブロブストレージに移動するか、基本的に何かを実行できます。

var myService = new ClassLibrary.TemplatedMailService(new WebProject.ServerStoragezrepository()); 

これは次のようになります。

public TemplatedMailService(ITemplateRepository repo) { 
    this._repo = repo; 
} 

はあなたがちょうどこれを行うことができますDIコンテナを使用していない場合:私たちはDIを使用していますが

は、我々は単に次のようになりコンストラクタを持っています最も拡張可能な方法。しかしDIにも目を向けてください。

+0

メモ:ユーザーがカスタムテンプレートを指定できるようにするには、リポジトリにGetメソッドとPutメソッドの両方が必要です。しかし、その場合は、ローカルフォルダ構造を使用しないでください。代わりにAzure Blob Storageを使用する必要があります。 –

1

はい、「コンテンツ」としてファイルをマークして、Server.MapPathの(「〜/ whatever.xslt」)を介してそれを見つけることが正常に動作する必要があります。

+0

クラスライブラリに電子メールを送信するクラスを持っていたいと思います。再利用可能なものが必要な場合は、それは解決策ではありませんか?つまり、普通のサーバーでは、xsltファイルがあるフォルダへの絶対パスを持つことができます。しかし、ここでは、どのように動作するのでしょうか? Server.MapPathを使用すると、Webサイトでは動作しますが、ワーカーの役割では動作しません...そうですか? – Juan

+0

ファイルはどこかにあるはずです。通常のサーバーでは、パスをハードコードするだけだと言いますか?どのようにファイルを最初に取得しますか?もちろん、常に同じファイルであれば、クラスライブラリのリソースにすることができます。 – smarx

関連する問題