gpt4 book ai didi

azure - 获取 Azure InstanceInput 终结点端口

转载 作者:行者123 更新时间:2023-12-04 15:59:54 25 4
gpt4 key购买 nike

我希望我的客户端与特定的 WorkerRole 实例进行通信,因此我尝试使用 InstanceInput 端点。

我的项目基于此问题中提供的示例:Azure InstanceInput endpoint usage

问题是,使用 RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint; 时,我没有获取实际实例的外部 IP 地址 + 端口我只是通过本地端口获取内部地址(例如 10.x.x.x:10100)。我知道我可以通过 DNS 查找 (xxx.cloudapp.net) 获取公共(public) IP 地址,但我不知道如何为每个实例获取正确的公共(public)端口。

一种可能的解决方案是:获取实例编号(来自 RoleEnvironment.CurrentRoleInstance.Id),并将该实例编号添加到 FixedPortRange 最小值(例如 10106)。这意味着第一个实例始终使用端口 10106,第二个实例始终端口 10107,依此类推。这个解决方案对我来说似乎有点老套,因为我不知道 Windows Azure 如何将实例分配给端口。

是否有更好(正确)的方法来检索每个实例的公共(public)端口?

问题#2:是否有任何有关支持 InstanceInput 终结点的 Azure 计算模拟器的信息? (正如我在 comments 中已经提到的:Azure 计算模拟器目前似乎不支持 InstanceInputEndpoint)。

第二个解决方案(更好):

要获取公共(public)端口,可以使用属性PublicIPEndpoint(我不知道为什么我一开始没有注意到这个属性)。

用法:RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].PublicIPEndpoint;

警告:该属性中的 IP 地址未使用 ( http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleinstanceendpoint.publicipendpoint.aspx )。

第一个解决方案:

正如“artfulmethod”已经提到的,REST 操作Get Deployment 检索有关当前部署的有趣信息。由于我遇到了一些烦人的小“问题”,我将在这里提供 REST 客户端的代码(以防其他人遇到类似的问题):

X509Store certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certificateStore.Open(OpenFlags.ReadOnly);

string footPrint = "xxx"; // enter the footprint of the certificate you use to upload the deployment (aka Management Certificate)
X509Certificate2Collection certs =
certificateStore.Certificates.Find(X509FindType.FindByThumbprint, footPrint, false);
if (certs.Count != 1) {
// client certificate cannot be found - check footprint
}
string url = "https://management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deployments/<deployment-name>"; // replace <xxx> with actual values
try {
var request = (HttpWebRequest)WebRequest.Create(url);
request.ClientCertificates.Add(certs[0]);
request.Headers.Add("x-ms-version", "2012-03-01"); // very important, otherwise you get an HTTP 400 error, specifies in which version the response is formatted
request.Method = "GET";

var response = (HttpWebResponse)request.GetResponse(); // get response

string result = new StreamReader(response.GetResponseStream()).ReadToEnd() // get response body
} catch (Exception ex) {
// handle error
}

字符串“result”包含有关部署的所有信息(XML 格式在“Response Body”@ http://msdn.microsoft.com/en-us/library/windowsazure/ee460804.aspx 部分中描述)

最佳答案

要获取有关您的部署的信息,包括角色实例的 VIP 和公共(public)端口,请使用 Get Deployment operation在服务管理 API 上。响应正文包括 InstanceInputList .

关于azure - 获取 Azure InstanceInput 终结点端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com