2009-11-12 25 views
6

他のサイトがデータベースにエラーを保存するために使用できるWebサービスを作成しました。"System.Web.HttpContextは、パラメータのないコンストラクタがないためシリアル化できません。"


System.Web.HttpContextにすることはできません。そして、彼らはしかし、私は、Webサービスのための次のエラーを取得していますなどのエラー、フィルタエラー、を検索、そのエラーを表示するために自分のサイトに来ることができますそれはパラメータのないコンストラクタを持たないため、直列化されています。

説明現在のWeb要求の実行中に、未処理の例外が発生しました。エラーの詳細とコード内のどこで発生したのかについては、スタックトレースを参照してください。

例外の詳細:System.InvalidOperationException:System.Web.HttpContextには、パラメータのないコンストラクタがないため、シリアル化できません。


ウェブサービスには、以下の機能が含まれています

 
[WebMethod] 
public static void LogError(HttpContext context, Exception exception, string APIKey) 
{ 
    //Log the error 
} 

例外をログに記録するWebサービスを使用している外部のサイトには、Global.asaxファイルに次のコードが含まれています

 
void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs 

    WebService.Errors.ErrorHandler.LogError(HttpContext.Current, Server.GetLastError(), "NOLDFHOI"); 
} 

HttpContextを自分のサイトからWebサービスの関数に取得するにはどうすればよいですか?

答えて

0

収集したい情報の種類を保持するように設計されたシリアル化可能なクラスを作成する必要があります。そのクラスの静的メソッドを作成し、クラスの新しいインスタンスを作成し、必要な情報を収集します。

これはLogErrorに渡されるこの新しいクラスです。

+0

そのクラスは私のWebサービスまたは外部サイトに含まれますか? 私はむしろクライアントに最後にコードを追加するように伝える必要はありません。 –

+0

外部サイトには、コンテキストにアクセスできる外部サイトが必要です。 – AnthonyWJones

8

HttpContextをシリアル化することはできません。最適な方法は、HttpContextから必要な情報をカプセル化してWebMethodに渡すカスタムクラスを作成することです。

+0

+1これは、ASP.NETアプリケーションから来ていない発信者にもメソッドを開くことになります。 WinformsアプリケーションはHttpContextを持たないので、この "LogError"メソッドを呼び出すことはできません。デザインに関しては最善の選択ではありません。 –

+0

@Joseph:このカスタムクラスはどのように見えますか?それはどんな種類のパラメータですか? 「情報をカプセル化する」ということは、正確にはどういう意味ですか? – GobiasKoffi

+0

@rohanbk POCOクラスは、必要な情報だけを持つプロパティを持つクラスです。 (HttpContextを介して)プロパティを設定し、ワイヤを介してそのクラスを使用します(POCOをSerializableとしてマークできるはずです) – Joseph

関連する問題