非ファブリック アプリまたはサービスからステートフル 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");
});