2012-09-10 2 views
0

다음과 같이 Object ValidationType, ValidationRule, ValidationProperty, ValidatorBase (Abstract 클래스), NotNullValidatorRule (ValidatorBase 추상 클래스에서 파생 됨)을 보유하고 있습니다. I)가목록에 abstact 클래스 인스턴스를 추가 할 수 없습니다.

//CodeProperty.Validators.Add(CodeMandatory를 추가하지 않은 경우

public class ValidationType 
{ 
    public ValidationType(); 

    public string AssemblyName { get; set; } 
    public string DefaultRuleSet { get; set; } 
    public long Id { get; set; } 
    public string Name { get; set; } 
    public long ProcessId { get; set; } 
    public List<ValidationRule> RuleSet { get; set; } 
    public long SubProcessId { get; set; } 
    public DateTime ValidFrom { get; set; } 
    public DateTime ValidTo { get; set; } 
} 

public class ValidationRule 
{ 
    public ValidationRule(); 

    public long Id { get; set; } 
    public string Name { get; set; } 
    public List<ValidationProperty> Properties { get; set; } 
    public long TypeId { get; set; } 
} 

public class ValidationProperty 
{ 
    public ValidationProperty(); 

    public long Id { get; set; } 
    public string Name { get; set; } 
    public long RulesetId { get; set; } 
    public List<ValidatorBase> Validators { get; set; } 
} 

public abstract class ValidatorBase 
{ 
    protected ValidatorBase(); 

    public string MessageTemplate { get; set; } 
    public string Name { get; set; } 
    public bool Negated { get; set; } 
    public string Tag { get; set; } 
    public string TemplateResourceName { get; set; } 
    public string TemplateResourceType { get; set; } 
    public string Type { get; set; } 

    public abstract XNode GetValidator(); 
} 

public class NotNullValidatorRule : ValidatorBase 
{ 

    public override XNode GetValidator() 
    { 
     try 
     { 
      XElement validation = new XElement("validator", 
        new XAttribute("type", this.Type), 
        new XAttribute("name", this.Name), 
        new XAttribute("messageTemplateResourceName", this.TemplateResourceName), 
        new XAttribute("messageTemplateResourceType", this.TemplateResourceType), 
        new XAttribute("messageTemplate", this.MessageTemplate), 
        new XAttribute("negated", this.Negated), 
        new XAttribute("tag", this.Tag)); 
      return (XNode)validation; 
     } 
     catch 
     { 
      throw; 
     } 
    }  
} 


I have WCF Service to return a List<ValidationType>, 

    public List<ValidationType> GetValidationRules(long processId) 
    { 
     try 
     { 
      List<ValidationType> ResultValidionTypesList = new List<ValidationType>(); 

      List<ValidationType> ValidationTypes = new List<ValidationType>(); 

      ValidatorBase CodeMandatory = new NotNullValidatorRule(); 
      CodeMandatory.Name = "CodeMandatory"; 
      CodeMandatory.TemplateResourceName = ""; 
      CodeMandatory.TemplateResourceType = ""; 
      CodeMandatory.Type = "Microsoft.Practices.EnterpriseLibrary.Validation.Validators.NotNullValidator,Microsoft.Practices.EnterpriseLibrary.Validation, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"; 
      CodeMandatory.Tag = "display:none"; 
      CodeMandatory.Negated = true; 
      CodeMandatory.MessageTemplate = ""; 
      CodeMandatory.GetValidator(); 
      ValidationProperty CodeProperty = new ValidationProperty(); 
      CodeProperty.Name = "Notes"; 
      CodeProperty.Validators.Add(CodeMandatory); 


      ValidationRule CompanyTypeRules = new ValidationRule(); 
      CompanyTypeRules.Name = "CustomerGroupRuleset"; 
      CompanyTypeRules.Properties.Add(CodeProperty); 

      ValidationType CompanyValidationsTypes = new ValidationType(); 
      CompanyValidationsTypes.Name = "iBoxV5.Model.CMS.Masters.CustomerGroup"; 
      CompanyValidationsTypes.DefaultRuleSet = "CustomerGroupRuleset"; 
      CompanyValidationsTypes.AssemblyName = "iBoxV5.Model.CMS.Masters, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"; 
      CompanyValidationsTypes.RuleSet.Add(CompanyTypeRules); 

      ResultValidionTypesList.Add(CompanyValidationsTypes); 

      return ResultValidionTypesList; 

     } 
     catch (Exception ex) 
     { 
      RollBackTransaction(); 
      throw ex; 
     } 
     finally 
     { 
      CloseConnection(); 
     } 

    } 

그리고 위의 값의 목록을 반환;

성명. 그리고 ValidatorBase (Abstract 클래스)에서 파생 된 NotNullValidatorRule의 인스턴스를 추가하려고하면 다음과 같은 WCF 서비스 오류가 발생합니다. 그러나 동일한 validationTypes는 콘솔 응용 프로그램에서 NotNullValidaitonRule을 포함하는 List를 반환합니다.

'서비스를 호출하지 못했습니다. 가능한 원인 : 서비스가 오프라인이거나 액세스 할 수 없습니다. 클라이언트 측 구성이 프록시와 일치하지 않습니다. 기존 프록시가 유효하지 않습니다. 자세한 내용은 스택 추적을 참조하십시오. 새 프록시를 시작하거나 기본 구성으로 복원하거나 서비스를 새로 고침하여 복구를 시도 할 수 있습니다. '

내부 연결이 닫혔습니다 : 예기치 않게 연결이 끊어졌습니다.

내부 예외 : 내부 연결이 닫혔습니다 : 예기치 않게 연결이 닫혔습니다. System.Net.HttpWebRequest.GetResponse() System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply에서 (시간 범위 제한 시간)

에서 사람은 pls는 무엇이 잘못되었는지에 대해 명확히 할 수 ...! 사전에

감사합니다 ..

답변

1

WCF 인프라가 ValidatorBase 후손 직렬화되는 모든에 대해 알고 있어야합니다/이러한 작업을 수행하기 위해 직렬화. 당신은 KnownTypeAttribute를 통해 데이터 계약이 정보를 제공해야

[DataContract] 
public class ValidationType {} 

[DataContract] 
public class ValidationRule {} 

[DataContract] 
public class ValidationProperty {} 

[DataContract] 
[KnownType(typeof(NotNullValidatorRule))] 
public abstract class ValidatorBase {} 

[DataContract] 
public class NotNullValidatorRule : ValidatorBase {} 
+0

죄송합니다! 친애하는 .. 그것의 말합니다. "인터페이스는 형식을 선언 할 수 없습니다." 제발 .. 제발 .. – Sravan

관련 문제