次のように、次のオブジェクト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 タイムアウト) で
誰かが何がうまくいかなかったのかを明確にすることができます..!
前もって感謝します..