首页 > Linux操作系统 > Linux操作系统 > 职责链模式在开发中的应用
public class ServiceEndpoint
{
public Uri Address
{
get;
set;
}
public Binding Binding
{
get;
set;
}
public Type ContractType
{
get;
set;
}
}public class BindingConstraint
{
public bool Constraint(ServiceEndpoint endpoint)
{
bool flag = false;
switch (endpoint.Binding.Name)
{
case "BasicHttpBinding":
//check the BasicHttpBinding;
flag = true;
break;
case "NetTcpBinding":
//check the NetTcpBinding;
break;
case "NetPeerTcpBinding":
//check the NetPeerTcpBinding;
break;
//...Other bindings' constraint;
}
return flag;
}
}
public abstract class BindingConstraint//:IEndpointConstraint
{
protected fields#region protected fields
protected BindingConstraint m_bindingConstraint;
protected bool m_hasNextConstraint = false; 
#endregion

public methods#region public methods
public void AddConstraint(BindingConstraint constraint)
{
m_bindingConstraint = constraint;
m_hasNextConstraint = true;
}
#endregion 

public abstract methods#region public abstract methods
public abstract bool Constraint(ServiceEndpoint endpoint);
#endregion
}
public class BasicHttpBindingConstraint:BindingConstraint
{
public override bool Constraint(ServiceEndpoint endpoint)
{
if (endpoint.Binding.Name == "BasicHttpBinding")
{
//check BasicHttpBinding Constraint;
BasicHttpBinding binding = endpoint.Binding as BasicHttpBinding;
//...
//check binding and address's scheme
if (endpoint.Address.Scheme.ToLower() != "http" && endpoint.Address.Scheme.ToLower() != "https")
{
throw new BindingConstraintException("the binding is mismatch with address schema.");
} 
return true;
}
else
{
if (m_hasNextConstraint)
{
return m_bindingConstraint.Constraint(endpoint);
}
else
{
return false;
}
}
}
}
public class BindingConstraintFactory
{
public static BindingConstraint CreateConstraint()
{
BindingConstraint basicHttp = new BasicHttpBindingConstraint();
BindingConstraint netTcp = new NetTcpBindingConstraint();
BindingConstraint netPeerTcp = new NetPeerTcpBindingConstraint();
BindingConstraint netNamedPipe = new NetNamedPipeBindingConstraint();
BindingConstraint wsHttp = new WSHttpBindingConstraint();
BindingConstraint wsFederationHttp = new WSFederationHttpBindingConstraint();
BindingConstraint wsDualHttp = new WSDualHttpBindingConstraint();
BindingConstraint netMsmq = new NetMsmqBindingConstraint();
BindingConstraint msmqIntegration = new MsmqIntegrationBindingConstraint();
netMsmq.AddConstraint(msmqIntegration);
wsDualHttp.AddConstraint(netMsmq);
wsFederationHttp.AddConstraint(wsDualHttp);
wsHttp.AddConstraint(wsFederationHttp);
netNamedPipe.AddConstraint(wsHttp);
netPeerTcp.AddConstraint(netNamedPipe);
netTcp.AddConstraint(netPeerTcp);
basicHttp.AddConstraint(netTcp);
return basicHttp;
}
}private static BindingConstraint m_bindingConstraint = BindingConstraintFactory.CreateConstraint();
public void AddServiceEndpoint(ServiceEndpoint endpoint)
{
if (m_bindingConstraint.Constraint(endpoint))
{
m_endpointsList.Add(endpoint);
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13770856/viewspace-402125/ ,如需转载,请注明出处,否则将追究法律责任。