カスタム メッセージ用に CustomBehaviorExtensionElement と CustomEndpointBehavior を作成しました。
public class CustomEndpointBehavior : IEndpointBehavior
{
private X509Certificate2 certificate;
public X509Certificate2 Certificate { get => certificate; set => certificate = value; }
public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
}
public void Validate(ServiceEndpoint endpoint)
{
}
}
public class CustomBehaviorExtensionElement : BehaviorExtensionElement
{
private ConfigurationPropertyCollection properties;
[ConfigurationProperty("Certificate")]
public X509CertificateConfigurationElement Certificate
{
get
{
return (X509CertificateConfigurationElement)base["Certificate"];
}
}
protected override ConfigurationPropertyCollection Properties
{
get
{
if (this.properties == null)
{
this.properties = new ConfigurationPropertyCollection
{
new ConfigurationProperty("Certificate", typeof(X509CertificateConfigurationElement), null, null, null, ConfigurationPropertyOptions.None),
};
}
return this.properties;
}
}
public override Type BehaviorType
{
get { return typeof(CustomEndpointBehavior); }
}
protected override object CreateBehavior()
{
// Create the endpoint behavior that will insert the message
// inspector into the client runtime
return new CustomEndpointBehavior();
}
}
public class X509CertificateConfigurationElement : ConfigurationElement
{
private ConfigurationPropertyCollection properties;
protected override ConfigurationPropertyCollection Properties
{
get
{
if (this.properties == null)
{
this.properties = new ConfigurationPropertyCollection
{
new ConfigurationProperty("findValue", typeof(string), string.Empty, null, new StringValidator(0, 2147483647, null), ConfigurationPropertyOptions.None),
new ConfigurationProperty("storeLocation", typeof(StoreLocation), StoreLocation.CurrentUser, null, null, ConfigurationPropertyOptions.None),
new ConfigurationProperty("storeName", typeof(StoreName), StoreName.My, null, null, ConfigurationPropertyOptions.None),
new ConfigurationProperty("x509FindType", typeof(X509FindType), X509FindType.FindBySubjectDistinguishedName, null, null, ConfigurationPropertyOptions.None)
};
}
return this.properties;
}
}
[ConfigurationProperty("findValue", DefaultValue = ""), StringValidator(MinLength = 0)]
public string FindValue
{
get
{
return (string)base["findValue"];
}
set
{
if (string.IsNullOrEmpty(value))
{
value = string.Empty;
}
base["findValue"] = value;
}
}
[ConfigurationProperty("storeLocation", DefaultValue = StoreLocation.CurrentUser)]
public StoreLocation StoreLocation
{
get
{
return (StoreLocation)base["storeLocation"];
}
set
{
base["storeLocation"] = value;
}
}
[ConfigurationProperty("storeName", DefaultValue = StoreName.My)]
public StoreName StoreName
{
get
{
return (StoreName)base["storeName"];
}
set
{
base["storeName"] = value;
}
}
[ConfigurationProperty("x509FindType", DefaultValue = X509FindType.FindBySubjectDistinguishedName)]
public X509FindType X509FindType
{
get
{
return (X509FindType)base["x509FindType"];
}
set
{
base["x509FindType"] = value;
}
}
}
しかし、SVCEditor では、クラス X509CertificateConfigurationElement のネストされたプロパティが表示されません。SVCEditor は Type 名のみを表示しますが、ネストされたプロパティ findValue、storeLocation、storeName、x509FindType を期待していました。 ここに例 があります。回答ありがとうございます。