0

我有一个带有 2 个 Web 角色(一个 Azure 网站项目和一个 Azure WCF 服务角色)的 Azure 项目。WCF 服务由 Azure 网站项目使用,并使用“添加服务引用”选项进行引用。该网站使用 web.config 中定义的 URL 连接到 WCF 服务,该服务在本地开发/Azure 计算模拟器中运行良好。在我的本地开发机器上,当我运行解决方案时,服务和网站会在 IIS Express 中加载并执行,URL 为“http://127.0.0.1:8080/v1.svc”和“http://127.0.分别为 0.1:81/"。

但是,当我在 Azure 云服务上发布应用程序时,它分别为网站和服务创建了一个单独的机器/VM/实例(因为它们被视为两个不同的角色)。

现在我的问题是,由于 Azure 在运行时为实例分配 IP,我应该如何动态更改(在网站的 web.config 中)中的 URL 并更新 WCF 服务以使网站能够无缝地使用 WCF 服务?

珍惜你的时间。

谢谢,卡蒂克。

4

2 回答 2

0

感谢您的答复。我尝试了解决方案,但收到 404 错误。在我的情况下,webrole 名称是“TimeSheetUI”,当我尝试使用“timesheetui.cloudapp.net:8080”访问该服务时,它会引发 404 错误。但是,如果我尝试使用http://e214d16594be4e31abfbf0488b5d612b.cloudapp.net:8080/timesheetservices.svc访问它,它可以工作。我希望我不需要添加任何带有 DNS 等的 CNAME 条目来使其工作。

但是,我尝试使用编程选项在运行时构建 URL,并将服务端点的类型选项设置为“内部”。

var endpoints = RoleEnvironment.Roles["TimeSheetService"].Instances.Select(i => i.InstanceEndpoints["TimeSheetService.EndPoint"]).ToArray();
var r = new Random();
EndpointAddress endPointAddress = new EndpointAddress(String.Format("http://{0}/TimeSheetService.svc", endpoints[r.Next(endpoints.Count() - 1)].IPEndpoint));
var factory = new ChannelFactory<TimeSheetProxy.ITimeSheet>("BasicHttpBinding_ITimeSheet");var client = factory.CreateChannel(endPointAddress);TimeSheetUI.TimeSheetProxy.TimeSheet[] ts = client.DisplayTimeSheets();

上面的代码工作正常,没有问题。但不确定这是否是一种优雅的完成方式!

找到上述解决方案@http: //lab.studiopesec.com/azure-applications-101-part-ii/

于 2013-01-08T05:17:49.237 回答
-1

在 ServiceConfig 文件中为您的服务指定端点/端口:

<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
   <WebRole name="WCFServiceRole">
      …
      <Endpoints>
         <InputEndpoint name="HttpIn" protocol="http" port="8080" localPort="8080" />
      </Endpoints>
   </WebRole>
   <WebRole name="MyWebRole">
      …
      <Endpoints>
         <InputEndpoint name="HttpIn" protocol="http" port="80" localPort="80" />
      </Endpoints>
   </WebRole>
   …
</ServiceDefinition>

然后在您的 web.config 中,使用 Azure DNS 和端口指定 WCF 端点(即 mywebrole.cloudapp.net:8080

有关详细信息,请参阅 -在 Windows Azure 中使用 WCF 的指南

于 2013-01-06T22:29:26.833 回答