0

次のように、次のオブジェクトValidationType、ValidationRule、ValidationProperty、ValidatorBase(抽象クラス)、NotNullValidatorRule(ValidatorBase抽象クラスから派生)を持っています。

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();
        }

    }

そして、追加しなかった場合、上記は値のリストを返しています

//CodeProperty.Validators.Add(CodeMandatory);

声明。NotNullValidatorRule (ValidatorBase(Abstract class) から派生したもの) のインスタンスを追加しようとすると、以下の WCF サービス エラーが発生します。ただし、コンソール アプリケーションでは、同じ validationTypes が NotNullValidaitonRule を含む List を返しています。

「サービスの呼び出しに失敗しました。考えられる原因: サービスがオフラインであるか、アクセスできません。クライアント側の構成がプロキシと一致しません。既存のプロキシは無効です。詳細については、スタック トレースを参照してください。新しいプロキシを開始するか、デフォルト構成に復元するか、サービスを更新することで、回復を試みることができます。

基になる接続が閉じられました: 接続が予期せず閉じられました。

内部例外: 基になる接続が閉じられました: 接続が予期せず閉じられました。System.Net.HttpWebRequest.GetResponse() で System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan タイムアウト) で

誰かが何がうまくいかなかったのかを明確にすることができます..!

前もって感謝します..

4

1 に答える 1

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 {}
于 2012-09-10T09:09:36.320 に答える