0

Web サービスにトレースを実装しようとしていますが、次のエラーが発生します。

クラス Host.AzureLocalStorageTraceListener、MyProject.Host の型が見つかりませんでした。

Azure でホストされているが、Azure Web サービスの通常の構造に従っていない Web サービスがあります。

MyProject.Host を指す webrole を持つ azure プロジェクトがあります。スタートアッププロジェクトです。

MyProject.Host というプロジェクトがあり、サービスの web.config と azure webrole が含まれています。

次に、サービス インターフェイス IService1 とサービス コード Service1.cs を含む MyProject.Service プロジェクトがあります。

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:     }

私が持っている2つのアイデアは

  1. ロールとサービスが 2 つの異なる場所にあるため、AzureLocalStorageTraceListener がどこにあるかについて混乱している、または

  2. これは、AzureLocalStorageTraceListener が作成されていない通常の Azure Web サービス ルートによって作成されていないためです。

しかし、これらの場合、私はそれらを修正する方法がわかりません。

誰にもアイデアはありますか?

どうもありがとう!

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 に答える