0

2 つの Web ロール (Azure Web サイト プロジェクトと Azure WCF サービス ロール) を持つ Azure プロジェクトがあります。WCF サービスは Azure Web サイト プロジェクトによって使用され、[サービス参照の追加] オプションを使用して参照されます。Web サイトは、web.config で定義された URL を使用して、ローカルの dev/Azure コンピューティング エミュレーターで正常に動作する WCF サービスに接続します。私のローカル開発マシンでソリューションを実行すると、サービスと Web サイトが読み込まれ、IIS Express で URL "http://127.0.0.1:8080/v1.svc" と "http://127.0.それぞれ 0.1:81/"。

ただし、Azure Cloud Services でアプリケーションを公開すると、Web サイトとサービス用にそれぞれ別のマシン/VM/インスタンスが作成されました (これらは 2 つの異なる役割と見なされるため)。

私の質問は、Azure が実行時にインスタンスの IP を割り当てるため、(Web サイトの web.config で) URL を動的に変更し、WCF サービスを更新して、Web サイトが WCF サービスをシームレスに使用できるようにするにはどうすればよいですか?

あなたの時間を大切にしてください。

ありがとう、カーシック。

4

2 に答える 2

0

ご返信ありがとうございます。解決策を試しましたが、404 エラーが発生しました。私の場合、webrole 名は「TimeSheetUI」で、「timesheetui.cloudapp.net:8080」を使用してサービスにアクセスしようとすると、404 エラーがスローされます。ただし、 http://e214d16594be4e31abfbf0488b5d612b.cloudapp.net:8080/timesheetservices.svcを使用してアクセスしようとすると、機能します。機能させるために、DNSなどでCNAMEエントリを追加する必要がないことを願っています。

ただし、サービス エンドポイントの Type オプションを「Internal」に設定して、実行時に URL を作成するプログラム オプションを試しました。

var endpoints = RoleEnvironment.Roles["TimeSheetService"].Instances.Select(i => i.InstanceEndpoints["TimeSheetService.EndPoint"]).ToArray();
var r = new Random();
EndpointAddress endPointAddress = new EndpointAddress(String.Format("http://{0}/TimeSheetService.svc", endpoints[r.Next(endpoints.Count() - 1)].IPEndpoint));
var factory = new ChannelFactory<TimeSheetProxy.ITimeSheet>("BasicHttpBinding_ITimeSheet");var client = factory.CreateChannel(endPointAddress);TimeSheetUI.TimeSheetProxy.TimeSheet[] ts = client.DisplayTimeSheets();

上記のコードは問題なく正常に動作します。しかし、これがエレガントな方法であるかどうかはわかりません!

上記のソリューション @ http://lab.studiopesec.com/azure-applications-101-part-ii/を見つけました

于 2013-01-08T05:17:49.237 に答える
-1

ServiceConfigファイルでサービスのエンドポイント/ポートを指定します。

<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
   <WebRole name="WCFServiceRole">
      …
      <Endpoints>
         <InputEndpoint name="HttpIn" protocol="http" port="8080" localPort="8080" />
      </Endpoints>
   </WebRole>
   <WebRole name="MyWebRole">
      …
      <Endpoints>
         <InputEndpoint name="HttpIn" protocol="http" port="80" localPort="80" />
      </Endpoints>
   </WebRole>
   …
</ServiceDefinition>

次に、web.configで、Azure DNSとポート(つまり、mywebrole.cloudapp.net:8080)を使用してWCFエンドポイントを指定します。

詳細については、参照-WindowsAzureでWCFを使用するためのガイダンス

于 2013-01-06T22:29:26.833 に答える