Use a service behavior to enter credentials with the WCF LOB Adapter SDK
Many times, adapter consumers will be required to pass credentials to the target line of business system. To provide this functionality, you will need to provide a WCF service behavior.
The following example code demonstrates how to derive a service behavior. It delegates the credentials obtained from the consumer of the adapter to the adapter. The adapter then must use line-of-business protocols to authenticate the credentials. Once the credentials are authenticated, the service can start listening for incoming events from the line of business application.
/// <summary>
/// This class derives from a WCF service behavior. It is used in the inbound scenario
/// for the Inbound Service to pass the line-of-business credentials to the adapter using
/// WCF ClientCredentials class.
/// </summary>
public class InboundClientCredentialsServiceBehavior : ClientCredentials, IServiceBehavior
{
public InboundClientCredentialsServiceBehavior() { }
public InboundClientCredentialsServiceBehavior(InboundClientCredentialsServiceBehavior other)
: base(other)
{
}
#region IServiceBehavior Members
public void AddBindingParameters(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
bindingParameters.Add(this);
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
public void Validate(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
#endregion
protected override ClientCredentials CloneCore()
{
return new InboundClientCredentialsServiceBehavior(this);
}
}
The following example code shows how to use the service behavior to pass credentials to the adapter.
// Create a ServiceHost for the EchoServiceImpl type
// and use the base address from app.config
ServiceHost host = new ServiceHost(typeof(EchoServiceImpl));
// Set service behavior to pass the line-of-business credentials.
InboundClientCredentialsServiceBehavior credentialsBehavior = new InboundClientCredentialsServiceBehavior();
credentialsBehavior.UserName.UserName = "username";
credentialsBehavior.UserName.Password = "****";
host.Description.Behaviors.Add(credentialsBehavior);
// Open the ServiceHost to start listening for messages
host.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.ReadLine();
// Close the ServiceHost
host.Close();