3

非ファブリック アプリまたはサービスからステートフル HTTP/WebApi サービスを呼び出せるようにしたいと考えています。ステートフル サービスに公開された URL を使用することもできますが、パーティション エンドポイントを解決することで、別のプライマリへのフェールオーバーを利用したいと考えています。

最初にデスクトップ コンソール アプリでテストしようとしましたが、InvokeWithRetryAsync 内で通信 Lambda 関数を実行できませんでした。

これは行き止まりですか (非ファブリック アプリはステートフル サービスを解決できません)、それとも非ファブリック アプリからエンドポイントを解決する別の方法がありますか。それ以外の場合は、"仲介者" ステートレス サービス (Wordcount Webservice など) でリクエストをラップする可能性があります。

        var result = await servicePartitionClient.InvokeWithRetryAsync(
            client =>
            {
                //never reaches here. 
                Uri serviceAddress = new Uri(client.BaseAddress, "SetConfiguration");

                HttpWebRequest request = WebRequest.CreateHttp(serviceAddress);
                request.Method = "POST";

                //Add the content into the body
                byte[] byteArray = Encoding.UTF8.GetBytes(_datapacket);
                request.ContentType = "application/json";
                request.ContentLength = byteArray.Length;
                Stream dataStream = request.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();


                request.Timeout = (int)client.OperationTimeout.TotalMilliseconds;
                request.ReadWriteTimeout = (int)client.ReadWriteTimeout.TotalMilliseconds;

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //for now, just return ok
                return Task.FromResult<string>("ok");

            });
4

2 に答える 2

4

これを試してからしばらく経ちましたが、結果は同じはずです。つまり、ステートフル サービスへのゲートウェイとして機能するステートレス サービスを構築します。

私が遭遇した問題は、最初にクラスターへの接続に関するものでした.セキュアなクラスターの場合は、セキュアな接続を確立できるようにするクライアント証明書をロードする必要があります.

これが解決されると、ネーム サービスがパーティションをローカル アドレスに解決し、クラスタの外部から解決できるアドレスには解決しないという問題に遭遇する可能性があります。

そのため、最終的な結果として、典型的な REST API としてアクセスできるステートレス サービスを構築し、パーティション分割の抽象化をクラスター内のこのレイヤーに移動するという利点を得ることができました。

于 2015-12-02T10:05:00.653 に答える