2016-07-01 8 views
0

私はAzure WebサイトでnetTcpRelayBindingを使用してWCFサービスを実行する予定です。Azure WebサイトのWCFサービスアドレス

azureのWebサイトで可能な興味深い機能の1つは、ライブ設定環境とステージング環境の間の設定を&にアップデートすることです。

私が抱えている問題は、私がステージングからプロダクションにスワップするときにサービスバスアドレスのアドレスを変更する方法とその逆です。私は達成するための一つの方法は、appsettingsのサービスアドレスを持っていることだと思う。

注:これはweb.configトランスフォームと再デプロイメントで実現できます。しかし、私たちは再配置を避けようとしています。

例の問題点:

<services> 
    <service name="Hwo.LocationService.Wcf.HotelLocationService"> 
    <endpoint     address="sb://staging.servicebus.windows.net/IHotelLocationService" 
       binding="netTcpRelayBinding" 
       contract="Hwo.ProductInterface.Common.Azure.Contracts.IHotelLocationService" 
       name="HotelLocationServiceEndPoint" /> 
    </service> 

...

それは上で見たように、アドレスはステージング環境を指しています。しかし、そのアプリケーションを本番と交換すると、アドレスは変更されません。スワップする際に、そのエンドポイントアドレスを変更したいと考えています。

これは可能ですか?

ありがとうございました。

答えて

0

ウィルからのアドバイス私は問題を完全に解決するサービスホストファクトリを作成しました。ここで

はコードです:

protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
    { 
     var serviceHost = new ServiceHost(serviceType, baseAddresses); 
     var serviceEndpoint = serviceHost.AddServiceEndpoint(serviceType.GetInterfaces().First(), 
      new NetTcpRelayBinding("netTcpRelayBinding"), 
      ConfigurationManager.AppSettings["ServiceBus.Address"] + serviceType.Name); 
     serviceEndpoint.Behaviors.Add(
      new TransportClientEndpointBehavior(
       TokenProvider.CreateSharedAccessSignatureTokenProvider(
        ConfigurationManager.AppSettings["ServiceBus.Key"], 
        ConfigurationManager.AppSettings["ServiceBus.Value"]))); 
     return serviceHost; 
    } 

感謝。

1

これはAppの設定を入れ替えることができるため、web.configファイルのApp設定にAddress値を書き込むことをお勧めします。一方、アドレス値を読み取って、コード内のサービスのエンドポイントとして設定する必要があります。スロットを交換する場合は、AzureポータルのApp Settingを変更するだけです。

読むの設定:

WebConfigurationManager.AppSettings["configFile"] 

は、設定を変更します

enter image description here

[更新] 動的に異なる的環境であなたのエンドポイントを設定するには、このドキュメントを参照してください(https://blogs.msdn.microsoft.com/carlosfigueira/2011/06/13/wcf-extensibility-servicehostfactory/

+0

私は最初のビットを理解しました。あなたの答えの第2ビットを詳しく教えてください。 一方、アドレス値を読み取ってコード内のサービスのエンドポイントとして設定する必要があります。スロットを交換する場合は、AzureポータルのApp Settingを変更するだけです。 読み取り設定: WebConfigurationManager.AppSettings ["configFile"] 非常に高く評価されています。 – Umang

+0

私は、WebConfigurationManager.AppSettings ["configFile"] 'のようなコードを使用してエンドポイント値を取得できることを意味します。サイトをスワップすると、AzureポータルのApp Settingsを変更しただけで、再デプロイする必要はありません。 –

+0

私は今それを理解しています。問題は、WCFサービスにアドレスをバインドできないことです(アプリケーションをコンソールとして実行しない限り)。私はIISの下でそれを実行することを好む。 – Umang

関連する問題