2017-08-07 16 views
0

ローカルサイトからデータを取得するWebジョブがあるサーバー。 ローカルサイトの数を変更することができますし、私の質問は、サイトのリストに従ってwebjobsを作成する方法はありますか? webjobは連続している必要があります。リストから空白のWebジョブを動的に作成する

+0

を説明していただけますか?私が理解していることは、ウェブサイトのデプロイメントごとにWebジョブをデパイしたいということですか? – Thomas

+0

私は説明しようとします。私はwebjobsのウェブサイトを持っています。それらのwebjobは、異なる場所で動作するローカルアプリからいくつかのデータを取得します。各ローカルサイトには、自分のwebjobがあります。さて、新しいWebjobを書く代わりに新しいローカルサイトを追加したいのですが、私はちょうどそれをリストに挿入して、Webjobを生成させたい(ウェブサイトを再度アップロードした後に)。今はっきりしていることを願っています。 –

+0

あなたはそれぞれのローカルサイトが空白のwebjobを生成することを意味しますか? webjobコードは同じですか? Webjobのコードを変更する必要はありませんか? –

答えて

1

あなたの説明によると、Webアプリケーションの名前に従ってWebジョブを展開するコードを書くことができます(WebアプリケーションでWebジョブを展開するループを書くことができます)。

webjob関数では、現在のWebアプリケーションの名前に従ってsql dbまたはazureストレージから接続文字列を要求するコードを記述できます(Environment.GetEnvironmentVariable( "WEBSITE_SITE_NAME")を使用して現在のWebアプリケーション名を取得できます) )。

Webjobをコードで展開する方法については、以下のコードを参照してください。

注意:まず、Visual StudioでWebジョブプロジェクトを作成する必要があります。その後、binのデバッグフォルダをzipファイルとしてパッケージ化する必要があります。このzipファイルをazureウェブアプリにアップロードします。

zipファイルをWebアプリケーションにアップロードする手順。

1.展開資格情報を設定します。展開資格情報を使用してWebサイト名とユーザー名とパスワード2.Replace

enter image description here

public static void WebApiSample() 
    { 
     string siteName = "yourwebsitename"; 
     String username = "username"; 
     String password = "password"; 
     String encoded = System.Convert.ToBase64String(
     System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password)); 

     HttpClient client = new HttpClient(); 
     client.BaseAddress = new Uri($"https://{siteName}.scm.azurewebsites.net/"); 
     client.DefaultRequestHeaders.Add("Authorization", $"Basic {encoded}"); 
     deployJobAsync(client,$"myJob-2", @"path\Debug.zip").Wait(); 

    } 

    private static async Task deployJobAsync(HttpClient client,string jobName, string zipFileName) 
    { 
     using (StreamReader reader = new StreamReader(zipFileName)) 
     { 

      StreamContent streamContent = new StreamContent(reader.BaseStream); 
      var response = await 
      client.PutAsync($"api/zip/site/wwwroot/App_Data/jobs/continuous/{jobName}/", 
      streamContent); 
      var result = await response.Content.ReadAsStringAsync(); 
      if (response.StatusCode == HttpStatusCode.OK) 
       return; 
      else 
       throw new Exception(result); 
     } 
    } 

結果:あなたはあなたが達成しようとするものをもう少し

enter image description here

関連する問題