0

我正在尝试在我的 Web 服务中实现跟踪,但出现错误:

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

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

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

有一个名为 MyProject.Host 的项目,其中包含服务的 web.config 和一个 azure 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. 因为角色和服务位于 2 个不同的地方,所以对 AzureLocalStorageTraceListener 的位置感到困惑,或者

  2. 因为它不是由通常的 Azure Web 服务路由创建的,所以 AzureLocalStorageTraceListener 尚未创建。

但如果是这些,我不知道如何解决它们。

有没有人有任何想法?

非常感谢!

4

1 回答 1

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的本地资源。

于 2012-08-07T10:25:55.150 回答