1

Azure Web サイトを使用して、オンプレミスのファイアウォールの背後でホストされている特定の WCF サービスを公開するハイブリッド アプリケーションを構築したいと考えています。Azure Web サイトは、WCF サービスを呼び出してデータを取得および配置するだけです。

オンプレミスの特定の WCF サービスへの Azure サービスへの Azure Connect を使用する方法があると考えていましたが、ネットワーク上のサンドボックス マシンにインストールしたので、そうであるかどうかはわかりません。セキュリティを強化するために、Azure とネットワーク間の接続を、指定した WCF サービスのみにロックダウンできればと思います。

WCF サービスを Azure Web サイトに公開するためのオプションは何ですか?

4

2 に答える 2

2

ここでは、Azure Service Bus があなたの味方です。あなたが実際にやろうとしているのは、具体的にはここで概説されているように、サービス バス リレーを有効にすることです。

http://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-relay/

また、環境内のサービスは、ファイアウォールを介して Service Bus に公開する必要があります。ここ (http://msdn.microsoft.com/en-us/library/windowsazure/ee706729.aspx) でいくつかの便利なヒントを見つけることができますが、多くの場合、サービス バスに登録するという単純な行為によって、NAT に十分な情報が提供され、インフラストラクチャを通過します。

Service Bus は、http: //msdn.microsoft.com/en-us/library/windowsazure/hh410102.aspxに記載されているように、さまざまなリレー バインディングをサポートしています。

ブログで Service Bus に関するプレゼンテーションを行っています。サンプル コードには、リレーを具体的に示す 2 つのプロジェクトがあります。http://www.stratospher.es/blog/post/slides-and-code-from-dallas-july-10-2012-windows-azure-cloud-summitを見て、サンプル コードをダウンロードしてください。必要な 2 つのプロジェクトは、「RelayDemoServer」と「RelayDemoClient」です。サンプル コードではリレーをコードで構成しますが、好みに応じて構成を介してこれを行うこともできます。

簡単に言うと、必要なサービスの WCF エンドポイントをサーバー側 (インフラストラクチャ内) で作成し、Service Bus で同等のリレー バインディングを作成する必要があります。これが完了すると、内部エンドポイントの Service Bus でホストされたバージョンになります。次のようになります。

// create the host itself...
System.ServiceModel.ServiceHost host =
    new ServiceHost(typeof(ProblemSolver));

// programmatically add the endpoints

// 1. the WCF endpoint "internally"
host.AddServiceEndpoint(
    typeof(IProblemSolver),
    new NetTcpBinding(),
    "net.tcp://localhost:9358/solver"
    );

// 2. the endpoint that is projected back through the service bus (note: NetTcpRelayBinding)
// This one will end up with a DNS name of "sb://[serviceNamespace].servicebus.windows.net/solver"
host.AddServiceEndpoint(
    typeof(IProblemSolver), 
    new NetTcpRelayBinding(),
    ServiceBusEnvironment.CreateServiceUri("sb", Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("ServiceBusNamespace"), "solver"))
        .Behaviors.Add(new TransportClientEndpointBehavior
            {
                TokenProvider = TokenProvider.CreateSharedSecretTokenProvider("owner", Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("ServiceBusSecret"))
            });

host.Open();

次に、クライアント側では、Service Bus を介してサービスを利用するだけです。それは次のようになります。

var cf = new ChannelFactory<RelayDemoServer.IProblemSolverChannel>(
    new NetTcpRelayBinding(),
    new EndpointAddress(
        ServiceBusEnvironment.CreateServiceUri(
            "sb", 
            Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("ServiceBusNamespace"), 
            "solver"
            )
        )
    );

cf.Endpoint.Behaviors.Add(
    new TransportClientEndpointBehavior 
        { 
            TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(
                "owner", 
                Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("ServiceBusSecret")
                ) 
        }
    );

using (var ch = cf.CreateChannel())
{
    Console.WriteLine(ch.AddNumbers(4, 5));
}

秘密のソースは、SB がホストする URI を把握する CreateServiceUri への呼び出しです。

これがお役に立てば幸いですが、さらに必要な場合はお知らせください。

アダム・ホフマン

Windows Azure ブログ - http://stratospher.es

ツイッター - http://twitter.com/stratospher_es

于 2012-09-18T21:38:41.990 に答える
0

そのレベルでは、Azure Web サイトはオンサイトの WCF サービスを呼び出す単なるクライアントであり、適切な呼び出しを出入りさせるためにファイアウォールを開く必要があります。

Azure Service Bus を見てください。これはメッセージ ベースです。

于 2012-09-18T15:36:39.127 に答える