2017-02-08 5 views
0

現在、Webジョブとして実行している.NETアプリケーションをAzure機能に変換しようとしています。Azure機能がアプリケーション設定にアクセスしていません

アプリケーションはAzure SQLデータベースにアクセスし、ポータルのApp Settingsから接続文字列を取得します。現在のところ、これはWebサイトのApp Service(Webjob)のApp Settingsです。

だから私はPowerShellの時限トリガを作成し、Run.ps1以内に私が持っている、Azureの機能アプリケーションを作成しました:

Write-Output "PowerShell Timer trigger function executed at:$(get-date)"; 
cd D:\home\site\wwwroot\MyApplication\MyApplication.exe 
Write-Output "PowerShell completed at:$(get-date)"; 

をそして、私は機能のアプリの設定を接続文字列を追加しました私が関数を実行すると、エラーが発生します。名前付き接続文字列myconnectionstringが見つかりませんでした。

MyApplication.exe.configに直接接続文字列を追加すると、完全に動作します。 Webjobとしても完璧に動作します。

アイデア?あなただけ起動した場合は動作しませんよう、

実際
$ConnStr = $env:SQLAZURECONNSTR_Nhibernate 
$ConfigName = "MyApp.exe.config" 
$Xml = [xml](gc $ConfigName) 
$Node = $Xml.configuration.connectionStrings.ChildNodes | where {$_.name -eq "nhibernate" } 
If($Node.connectionString -ne $ConnStr) { 
    Write-Output "Updating Connection String"; 
    $Node.connectionString = $ConnStr 
    $Xml.Save("D:\home\site\wwwroot\MyFunction\$ConfigName") 
} 

答えて

4

:これはPowerShellは、以下のダビデの回答に基づいていここで、将来的には他の誰を支援するだけで、ケース

UPDATE

EXE。 WebJobで動作する方法は、exeファイルのコピーを作成し、.exe.configをappsettingに変換することです。

1つの推奨される回避策は、アプリの設定ではなく、の環境変数myconnectionstringに依存するようにすることです。それはすべてのプロセスがすべてのenv変数を自動的に継承するので機能します。

代わりに、MyApplication.exe.configにアプリケーション設定のダミー値を配備し、プロセスを起動する前にenv変数の値を使用してPowerShellスクリプトに文字列置換を実行させることもできます。変換がまだ完了していない場合は、ファイルを保存するようにしてください。保存すると機能が薄くなります。

+0

ああ、わかります。残念ながら、私はアプリケーションの設定を取得するコードを制御する必要はありません。これはNHibernateの設定で、 nhibernateから取得し、nhibernate接続文字列を探します。 もう1つの回避策がありますか? – littlecharva

+0

可能な代替案を追加しました。 –

+0

素晴らしいアイデア!ありがとう。 – littlecharva