AzureLocalStorageTraceListener在哪里居住?

时间:2012-08-07 09:48:47

标签: azure diagnostics

我正在尝试在我的网络服务中实现跟踪,但我收到了错误:

  

找不到类的类型   Host.AzureLocalStorageTraceListener,MyProject.Host。

我有一个web服务,它托管在azure中,但不遵循azure webservices的常规结构。

有一个带有webrole的azure项目,指向MyProject.Host。这是启动项目。

有一个名为MyProject.Host的项目,其中包含服务的web.config和天蓝色的webrole。

然后我们有MyProject.Service项目,它包含服务接口IService1和服务代码Service1.cs。

web.config中的代码是:

    <sharedListeners>
       <add name="AzureLocalStorage" type="Host.AzureLocalStorageTraceListener, MyProject.Host"/>
    </sharedListeners>

错误是:

  

无法找到类Host.AzureLocalStorageTraceListener的类型,   MyProject.Host。描述:期间发生了未处理的异常   执行当前的Web请求。请查看堆栈   跟踪以获取有关错误及其来源的更多信息   代码。

     

异常详细信息:System.Configuration.ConfigurationErrorsException:   无法找到类Host.AzureLocalStorageTraceListener的类型,   MyProject.Host。

来源错误:

    Line 53:         private void RegisterRoutes()
    Line 54:         {
    Line 55:             RouteTable.Routes.Add(new ServiceRoute(string.Empty, new WebServiceHostFactory(), typeof(Service1)));
    Line 56:         }
    Line 57:     }

我有两个想法

  1. 因为角色和服务分布在两个不同的地方,所以对AzureLocalStorageTraceListener的位置感到困惑,或者

  2. 因为尚未由通常的Azure Web服务路由创建尚未创建AzureLocalStorageTraceListener。

  3. 但如果是这些,我不知道如何修复它们。

    有没有人有任何想法?

    非常感谢!

1 个答案:

答案 0 :(得分:4)

首先,您必须知道自己需要创建 AzureLocalStorageTraceListener ,此类不是Azure SDK的一部分:

using System;
using System.Diagnostics;
using System.IO;
using Microsoft.WindowsAzure.Diagnostics;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace MyProject.Host
{
    public class AzureLocalStorageTraceListener : XmlWriterTraceListener
    {
        public AzureLocalStorageTraceListener()
            : base(Path.Combine(AzureLocalStorageTraceListener.GetLogDirectory().Path, "MyProject.svclog"))
        {
        }

        public static DirectoryConfiguration GetLogDirectory()
        {
            DirectoryConfiguration directory = new DirectoryConfiguration();
            directory.Container = "wad-tracefiles";
            directory.DirectoryQuotaInMB = 10;
            directory.Path = RoleEnvironment.GetLocalResource("CustomLogs").RootPath;
            return directory;
        }
    }
}

我建议您将此添加到 MyProject.Host 项目中,因为此文件与主机有关,而与服务无关。添加此文件后,我们知道:

  • 装配: MyProject.Host
  • 类: MyProject.Host.AzureLocalStorageTraceListener (这是基于命名空间,而不是基于程序集的名称)

您将能够在web.config中正确引用它:

<sharedListeners>
   <add name="AzureLocalStorage" type="MyProject.Host.AzureLocalStorageTraceListener, MyProject.Host"/>
</sharedListeners>

注意: AzureLocalStorageTraceListener类中的代码假定您拥有一个名为 CustomLogs 的本地资源。