我正在尝试在我的网络服务中实现跟踪,但我收到了错误:
找不到类的类型 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: }
我有两个想法
因为角色和服务分布在两个不同的地方,所以对AzureLocalStorageTraceListener的位置感到困惑,或者
因为尚未由通常的Azure Web服务路由创建尚未创建AzureLocalStorageTraceListener。
但如果是这些,我不知道如何修复它们。
有没有人有任何想法?
非常感谢!
答案 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 项目中,因为此文件与主机有关,而与服务无关。添加此文件后,我们知道:
您将能够在web.config中正确引用它:
<sharedListeners>
<add name="AzureLocalStorage" type="MyProject.Host.AzureLocalStorageTraceListener, MyProject.Host"/>
</sharedListeners>
注意: AzureLocalStorageTraceListener类中的代码假定您拥有一个名为 CustomLogs 的本地资源。