2017-12-14 15 views
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; } 

     } 

를이 내가 포털 응용 프로그램에서 호출하는 방법은 다음과 같습니다 : DataContractResolver 경우 사용을 고려 :

ErrorExceptionInformation information = new ErrorExceptionInformation 
       { 
        Exception = errorToLog, 
        Application = Models.Constants.ErrorLog.ErrorLocation, 
        Category = Models.Constants.ErrorLog.AdminPortalEnvironmentName 
       }; 

       new LoggingClient().LogException(information); 

그러나 나는 다음과 같은 오류가 점점 계속 다음과 같이

내 WCF 설정입니다 DataContractSerializer를 사용하거나 알려진 유형 목록에 정적으로 알려지지 않은 유형을 추가합니다. 예를 들어 KnownTypeAttribute 속성을 사용하거나 serializer에 전달 된 알려진 유형 목록에 추가합니다. ' 자세한 내용은 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 대신에 동작 계약의 인터페이스의 속성을 넣어 :

답변

0

오류이 알려주는 당신이 할 수있는

[ServiceKnownType(typeof(ErrorExceptionInformation))] 
[ServiceContract] 
public interface ILogging 
{ 
    [OperationContract]    
    void LogException(ErrorExceptionInformation exception); 
} 
+0

내가 relly을 받고 있지 않다 (ServiceKnownType (typeof (ErrorExceptionInformation))을 사용하는 것과 동일 함) –

+0

내가 생각하기에이 방법을 사용하는 이유는 나에게 같은 오류가 발생하기 때문입니다. – Crowcoder

+0

@babuji 이렇게하면 더 자세히 살펴볼 것입니다. 속성을 사용하면 인터페이스가 작동 계약이 아니라 인터페이스로 이동합니다. – Crowcoder