1

每次运行应用程序时,我都面临启动 MS Azure 模拟器的问题。可能是我遵循的过程不正确。就像:1)编辑代码 2)通过在 Visual Studio 中按 F5 来运行项目(Azure 项目是启动项目) 3)VS 启动 Ms Azure Emulator 4)最后应用程序在本地主机(在 VS 内置 Web 服务器中)运行有一些像 127.0.0.1:82 这样的网址

开销是每次我进行更改时,我都会执行上述 4 个步骤。这会浪费大量的开发时间。

我的问题:有什么方法可以直接使用 IIS 运行,例如 1)编辑代码 2)在浏览器中构建并启动应用程序 3)附加到进程 w3wp 以进行调试。

我是一个新的天蓝色项目。您的帮助将不胜感激。

我的 ServiceDefinition.csdef:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="ABC" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="ABCWebRole">
    <Sites>
      <!--<Site name="External" physicalDirectory="..\External">
        <Bindings>
          <Binding name="Http" endpointName="HttpIn" />
        </Bindings>
      </Site>-->
      <Site name="ABCWebRole" physicalDirectory="..\ABCWebRole">
        <Bindings>
          <Binding name="Http" endpointName="HttpIn" />
          <!--<Binding name="HttpsIn" endpointName="HttpsIn" hostHeader="app.ABC.com" />-->
        </Bindings>
      </Site>
    </Sites>
    <ConfigurationSettings>
      <Setting name="StorageConnectionString" />
      <Setting name="SmtpServer" />
      <Setting name="SmtpPort" />
      <Setting name="SmtpUsername" />
      <Setting name="SmtpPassword" />
      <Setting name="myDSUserName" />
      <Setting name="myDSPassword" />
      <Setting name="myDSIntegratorKey" />
      <Setting name="APIUrl" />
      <Setting name="AccountManagementUrl" />
      <Setting name="myDSEmail" />
      <Setting name="myDSAccountId" />
      <Setting name="DSmemberPassword" />
      <Setting name="QueueNamespace" />
      <Setting name="QueueIssuer" />
      <Setting name="QueueIssuerKey" />
      <Setting name="ShowingFeedbackQueueName" />
      <Setting name="ServiceReportQueueName" />
    </ConfigurationSettings>
    <LocalResources>
      <LocalStorage name="ABCLocal" cleanOnRoleRecycle="true" sizeInMB="1024" />
      <LocalStorage name="DiagnosticStore" cleanOnRoleRecycle="true" sizeInMB="7000" />
      <LocalStorage name="CustomLogging" cleanOnRoleRecycle="true" sizeInMB="1024" />
    </LocalResources>
    <Certificates>
      <Certificate name="app.ABC.com" storeLocation="LocalMachine" storeName="My" />
    </Certificates>
    <Endpoints>
      <InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="app.ABC.com" />
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
  </WebRole>
  <WorkerRole name="ABCWorkerRole" vmsize="ExtraSmall">
    <!--Remove diagnostics permissions fix...  Remember to remove the associated files<Startup>
      <Task commandLine="FixDiag.cmd" executionContext="elevated" taskType="background" />
    </Startup>
    -->
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
    <ConfigurationSettings>
      <Setting name="StorageConnectionString" />
      <Setting name="SmtpServer" />
      <Setting name="SmtpPort" />
      <Setting name="SmtpUsername" />
      <Setting name="SmtpPassword" />
      <Setting name="QueueNamespace" />
      <Setting name="QueueIssuer" />
      <Setting name="QueueIssuerKey" />
      <Setting name="ShowingFeedbackQueueName" />
      <Setting name="ServiceReportQueueName" />
    </ConfigurationSettings>
    <LocalResources>
      <LocalStorage name="DiagnosticStore" cleanOnRoleRecycle="true" sizeInMB="7000" />
      <LocalStorage name="CustomLogging" cleanOnRoleRecycle="true" sizeInMB="1024" />
    </LocalResources>
  </WorkerRole>
</ServiceDefinition>
4

1 回答 1

2

我通常将我的服务配置为能够在 Azure 或 IIS 中运行。一开始设置它需要一点时间,然后是你选择从 Visual Studio 运行哪个项目的问题,所以当你将 .ccproj 设置为启动项目时,当你按下 F5 时它会在 azure 中运行。否则,当您将 .csproj 设置为启动项目时,您可以根据您配置 Web 应用程序的方式在 cassini、IIS Express 或本地 IIS 中运行它。您需要进行的一次性更改是将连接到 Azure 诊断侦听器的逻辑从 web.config 移动到 Global.asax->Application_Start() 或 WebRole.cs->Onstart() 方法,您可以在其中检查是否服务通过 RoleEnvironment 对象在 Azure 环境内部或外部运行,代码如下

if (RoleEnvironment.IsAvailable)
{
      Trace.Listeners.Add(new DiagnosticMonitorTraceListener 
                          {
                             Name = "AzureDiagnostics",
                             Filter = new EventTypeFilter(SourceLevels.All) 
                          });
}
else
{
...hook it to a listener that writes logs to an xml file or something
}

请记住,在 azure 环境之外运行时,您将失去 Azure 特定功能,例如通过 RoleEnvironment 对象读取 .cscfg 值的能力(但仍可从两者访问 web.config)。而且您还必须通过不同类型的配置手动运行辅助角色(不太直接)

于 2012-11-15T00:50:34.170 回答