[Windows Azure] Windows Azure 教戰手札:書籍服務與勘誤區

本區為 Windows Azure 教戰手札書籍的技術支援區,以及書籍的勘誤等讀者服務區,不定時更新。

本區為 Windows Azure 教戰手札書籍的技術支援區,以及書籍的勘誤等讀者服務區,不定時更新。

Q. 書中與 Web Role 有關的範例程式無法在 Windows Azure Tools v1.3 上運作。

A.

由於 PDC 2010 宣布 Windows Azure 中的 Web Role 開始支援 Full IIS 的功能,而在 Windows Azure Tools v1.3 升級 Web Role 的過程中,會自動在 ServiceDefinition.csdef 檔案中加入啟用 full IIS 的設定(紅字部份):

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="CloudFileExplorer" xmlns="
http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="CloudFileExplorerWeb">

    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="HttpIn" endpointName="HttpIn" />
        </Bindings>
      </Site>
    </Sites>

    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" />
      <Setting name="FileDataSource" />
      <Setting name="DriveSizeInMB" />
    </ConfigurationSettings>
    <LocalResources>
      <LocalStorage name="DriveCache" cleanOnRoleRecycle="false" sizeInMB="100" />
      <LocalStorage name="MyData" cleanOnRoleRecycle="false" />
    </LocalResources>
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
    </Endpoints>
  </WebRole>
</ServiceDefinition>

這會在執行範例程式時,發生 SetConfigurationSettingPublisher needs to be called before FromConfigurationSetting can be used 的例外,因為在 Full IIS 的模式下,WebRole.cs 中的程式並不會執行。

若要解決此問題,請開啟 ServiceDefinition.csdef,把升級工具多加的那一段設定移除即可。但若一定要使用 Full IIS 的話,則要將原本執行於 WebRole.cs 的 OnStart 方法中的 SetConfigurationSettingPublisher 程式移到 Web 應用程式的 Global.asax 內的 Application_Start 事件常式。

Reference: http://blog.smarx.com/posts/how-to-resolve-setconfigurationsettingpublisher-needs-to-be-called-before-fromconfigurationsetting-can-be-used-after-moving-to-windows-azure-sdk-1-3