0
私はポータルアプリケーションから自分のWCFメソッドを呼び出しています。パラメータhttp://tempuri.org/:例外をシリアル化しようとしているときにエラーが発生しました。 C#で
[ServiceContract]
public interface ILogging
{
[OperationContract]
[ServiceKnownType(typeof(ErrorExceptionInformation))]
void LogException(ErrorExceptionInformation exception);
}
public class Logging : ILogging
{
public void LogException(ErrorExceptionInformation exception)
{
LogProviderManager.Default.WriteLog(exception.Application, exception.Exception, true, exception.Category);
}
}
[DataContract]
public class ErrorExceptionInformation
{
[DataMember]
public string Application { get; set; }
[DataMember]
public Exception Exception { get; set; }
[DataMember]
public string Category { get; set; }
}
、これは私がポータルアプリケーションで呼び出す方法です::次のように
私のWCFの設定がある
ErrorExceptionInformation information = new ErrorExceptionInformation
{
Exception = errorToLog,
Application = Models.Constants.ErrorLog.ErrorLocation,
Category = Models.Constants.ErrorLog.AdminPortalEnvironmentName
};
new LoggingClient().LogException(information);
は、しかし、私は、次のエラーを取得しておいてください。 場合DataContractResolverの使用を検討してくださいDataContractSerializerを使用しているか、またはKnownTypeAttribute属性を使用するか、シリアライザに渡される既知の型のリストに追加するなど、既知の型のリストに静的に知られていない型を追加してください。 '詳細については、InnerExceptionを参照してください。
[ServiceContract]
public interface ILogging
{
[OperationContract]
[ServiceKnownType("GetKnownTypes", typeof(KnownTypeHelper))] // << -- change this
void LogException(ErrorExceptionInformation exception);
}
static class KnownTypeHelper
{
public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider)
{
System.Collections.Generic.List<System.Type> knownTypes =
new System.Collections.Generic.List<System.Type>();
knownTypes.Add(typeof(ErrorExceptionInformation));
// knownTypes.Add(typeof(... any others....));
return knownTypes;
}
}
Update
をOR代わりに操作契約のインターフェイスに属性を置く:
私はレリ得ていないのです(ServiceKnownType(typeof(ErrorExceptionInformation))を使用するのと同じように) –
私はこれをやっている理由はあなたの方法が私に同じエラーを与えるからです。 – Crowcoder
@babujiこれは、これをさらに調べるように促しました。そのバージョンを使用すると、属性は操作契約ではなくインターフェースに表示されます。 – Crowcoder