2016-11-24 3 views
-1

Webアプリケーション内に別のプロジェクトとして作成されたMVC Webアプリケーションとコンソールアプリケーションがあります。このコンソールアプリケーションを指定した間隔でWindowsサービスとして実行します。コンソールアプリケーションは、一部の人にメールを送信するためのアプリケーションです。自分のアプリケーションのログインページにリダイレクトするメールの本文に自分のアプリケーションのURLを含める必要があります。私は複数のインスタンスに対してこのサービスを実行しているので、コードでURLをハードコードできませんでした。誰か助けてください。私は以下のコードを試しました。しかし、それはヌル値を返しています。コンソールアプリケーションからアプリケーションURLが必要

var site = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.ApplicationPath.TrimEnd('/'); 
       var url = string.Format("<a href='{0}'>Login</a>", site); 
+0

HttpContextがまったく使用できないときに、HttpContext.Current'から情報を取得しようとしています。コンソールアプリケーションがオペレーティングシステムによって直接起動され、着信HTTPリクエストのイベントではなくMVCアプリケーションでのリクエスト処理) - 利用できないものを使用しようとするのは慣用的です。 – davke

答えて

1

これをコメントから質問に変換しました。

HttpContextがまったく使用できない状況では、HttpContext.Currentから情報を取得しようとしています。コンソールアプリケーションがオペレーティングシステムによって直接起動され、着信HTTP要求のイベントでは起動されないためですあなたのMVCアプリケーション) - 使用するhttpコンテキストがない(したがって、コンソールアプリケーションではHttpContext.Currentがnullです)。

電子メールで使用するURLを決定する独自のアプリケーションロジックをコンソールアプリケーション用に設定する必要があります。それは、「各電子メールで使用されるURLは、具体的にどのように依存するのですか」という質問に対する答えに依存します。言い換えれば - 「どの電子メールでどのURLを使用するのか」その質問への答えを見つけたら、その依存関係をWindowsサービスに渡す方法を考えることができます。

例(それはあなたのケースを記述する場合、私は知らない):異なるURL

  • 上のいくつかのWebアプリケーションがある

    • これらのWebアプリケーションのそれぞれは、
    • を送信するためにキューに電子メールを追加することができます
    • Windowsサービス(コンソールアプリケーション)はしばらくの間実行され、電子メールを送信してキューを処理するようにスケジュールされています。各電子メールには、アプリケーションのURLが追加されている必要があります。

    上記の例では、アプリケーションのURLとともに電子メールをキューに追加して、その情報をコンソールアプリケーションのキューから取得することができます。したがって、各電子メールにはURLが関連付けられています。キュー自体がどのように実装されるかは関係ありません(SQL、ファイル、...)。

  • 関連する問題