2016-03-22 14 views
2

私がホストしているWCFサービスを呼び出すWebサイトを作成しています。 URLがJSでハードコードされていることに注意してください。JavaScript呼び出しのサービス接続URLはどこに保存する必要がありますか?

var config = { 
     url: 'http://serverName:8000/MmaWebApiService/CreateCassette', 
     method: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     data: { 'moduleSerialNumbers': 'dataHere' } 
    }; 

どこにURLを格納するのですか?私はweb.configファイルが良い場所だと思うだろうが、私はそれにアクセスする方法がわからない。 One suggestionは次のようなものです:

<img id="ImgHeader" runat="server" src="<%$ ConfigurationSettings.AppSettings["ImagePath"] %>" /> 

しかし、私はそれがAngularJSを使用して、私の平野老いたHTMLページで動作するとは思いません。私はサービスURLをどこに保存するかについて少し迷っていますので、JS全体にハードコードされていません。たとえば、別のサーバーにデプロイする場合、JSですべての呼び出しを検索してサーバー名を置き換える必要はありません。私はベストプラクティスを欠いているに違いない。

+0

それはすべての種類に依存します。前に述べた方法を使うことができます。私の会社では、メインレイアウトのオブジェクトに、サーバーが提供するさまざまなURLを設定します。 [あなたは 'ConfigurationManager.AppSettings'(http://stackoverflow.com/questions/3854777/read-variable-from-web-config)を使ってWeb.configから読むことができます。 –

+0

あなたはそれらをaに入れることができます。jsファイルにコピーし、ヘッダーにスクリプトを含めます。 1ページのアプリケーションでは、通常、それらを.jsonファイルに保存し、必要に応じてajax呼び出しで読み込んでいます。 –

+0

Mike:私はJSでConfigurationManagerを使用できるとは思わない。 Jesse:良いヒント。私はそれを試みるかもしれない。ありがとう! –

答えて

2

は正しいURLはデプロイ時に決定されるため、それが展開心配です。そこで私はデプロイメントプロセスのの間にURL を変更するために、展開ツール(Presto)を使用しました。私はindex.htmlの中にルートURLを格納してしまった:私はそれをID(接続)が得られたので、それが私たちの展開アプリにより、後で変更することができ

enter image description here

注意してください。

はその後、私のAngularJSコントローラで、私はこのようにそれを使用します。

 var config = { 
      url: rootWebApiUrl + '/api/Cassette', 
      method: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      data: [$scope.state.subId1, $scope.state.subId2, $scope.state.subId3] 
     }; 

私は、Web APIをされているサーバーの名前にURLを設定することにより、デプロイメント時にURLを変更するプレストを設定しました配備された。

enter image description here

このアプローチには若干の問題があります:index.htmlを、それを修正するために、展開アプリためにXML-解析可能なことができるようにしています。つまり、このように、私はいくつかの行を変更しなければならなかった意味:

は大文字でなければなりません:

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> 

NG-ビュー:

<!DOCTYPE html[]> 

は、任意のメタタグを(スラッシュクローズが必要)閉じる必要がありますそれ以降は= ""である必要があります:

<div ng-view=""> 

私はこれらの変更を加えて、まだアプリを実行しています。だから私はいいと思う。

2

角度を使用すると、モジュール設定で定数を定義できます。

これで、通常のようにコントローラまたはサービスに注入できる定数があります。

angular.application('app').controller('myCtrl', myCtrl); 
myCtrl.$inject['ENDPOINT']; 
function myCtrl(ENDPOINT) { 
    var myUrl = ENDPOINT.URL; 
} 
+0

興味深い。 Jesseが提案したよりも優れたアプローチであるかどうかは疑問です。URLをJSファイルに入れてください。 –

+0

モジュール設定が見つからない場合は、Angularアプリが起動しません。外部設定ファイルを読み込めない場合は、うまく動作しません。 –

+0

展開の話はどうですか? QAまたはプロダクトに展開することに基づいてURLをどのように変更しますか?それは手作業ですか? –

関連する問題