Service Factory blogcasts
April 20th, 2006
Don Smith started a series of blogcasts where he is showing some of the Service Factory functionality. As usual this is very good stuff and very developer-friendly.
Service Factory (was Service BAT) first public drop
April 13th, 2006
The first public drop of Service Factory is available on the workspace.
Download it and give feedback on the message boards! If you want to
keep updated with this project, here you have a list of Service Factory
bloggers:
- Don Smith
- Jason Hogg
- Tom Hollander
- Pablo Galiano
- Pablo Cibraro
- Christian Weyer
- Edward Bakker
- Beat Schwegler
- Matias Woloski
I will post more about this exciting project in the next weeks.
Hey SVC-BAT is out there!
April 6th, 2006
Don Smith announced today that Service BAT Service Factory is finally a public project. I’ve been part of this project since the beginning of the year and I can tell you that I’m pretty excited about it. Jason Hogg said that this were going to change the way we develop SO applications.
This is a great moment for people writing Service Oriented apps using Microsoft technologies!
First, if you are not aware of patterns & practices latest
activities, let me tell you that they’ve been creating BATs, Baseline
Architecture Toolkits, which are more than App Blocks. They cover the
whole thing! The first one was the SC-BAT (for Smart Client apps using CAB) which was more than successful. So here is the definition:
What is a BAT? A BAT is a collection of various forms of guidance (written
guidance like patterns, reusable code like application blocks,
executable code like reference implementations, and guidance packages
embedded in Visual Studio) to help .NET developers and architects build
a certain kind of application.
What is the scope of Service BAT Service Factory? In short, from the proxy to the database.
Join this project if you want to
- Write Service Oriented apps using WCF or ASMX
- Leverage the best practices and the experience of a 50 recognized experts in the
field (the advisor board) and a group of Redmond brainees - Automate the menial tasks of creating a Service by leveraging the use of GAT
- If you were looking for the Grail on writing backends for Enterprise Applications
- Solve most of the cross-cutting concerns (Exception Shielding, Logging, Versioning, Security, Data Entitlement, and more)
- Align to WCF
- Have great tooling for WCF
See you there!
UPDATE: want to see some early screenshots? look at Edward Bakker post. Christian Weyer also blogged about it.
UPDATE 2: Service BAT was rebranded. Now it’s Web Service Software Factory.
The future of EDRA…
February 15th, 2006
Published by patterns & pracites: the long awaited question
Blog moved
September 10th, 2005
My Blog has been moved… This is the new url: http://blogs.southworks.net/blogs/matiaswoloski
EDRA Hands On Labs for the community!
July 28th, 2005
Southworks is pleased to announce the release of its EDRA Workshop material to the community!
This course has been delivered to over 65 companies in different industries like Banking, Finance, Insurance, Health and Automotive all around the world during the last year (including places like Argentina, Chile, Colombia, Costa Rica, Ecuador, Mexico, Sweden and Uruguay). Some of these workshops were co-hosted by Microsoft regional offices.
The material includes ALL THE HANDS ON LABS and the source code!
These are the labs you’ll find:
- MODA01 Installing EDRA
- MODA02 Creating a sample solution
- MODA03 Implementing Authenticate Use Case
- MODA04 Implementing Funds Transfer Use Case
- MODA05 Implementing Bill Payment Use Case
- MODA06 Implementing UIP in Funds Transfer Use Case
- MODA07 Implementing Account Summary Use Case
- MODA08 Instrumentation with EIF
- MODA09 Multilanguage implementation of Home Banking.pdf
- MODA10 Creating an EDRA Handler - IdentityImpersonate
- MODA11 Generating Unit Tests using NUnit 2.2
This is the same material used by the instructor lead course!
If you want to take a brief look at how they look, download the HOL PDFs from the EDRA workspace
Download the full version of the HOLs
EDRA Workspace Admin!
February 25th, 2005
The EDRA team has given me the status of Administrator of the Workspace
Issue with ServiceGroup in EDRA 1.1
February 14th, 2005
EDRA (Shadowfax) has a cool feature called ServiceGroup. This allows you to group services in a logical group and has a pipeline defined that uses the Service Group. An example of usage would be creating a service group for transactional service actions and another service group for non-transactional ones (example of Wake Jens from Volvo IT).
This nice feature has an issue in EDRA 1.1 so I decided to go deep into it. I found that there was a problem in the Configuration Validation which didn’t take into account this service’s group. To make the long story short, as we have the source code of EDRA here are the methods I’ve changed (in bold) on the file ConfigValidator.cs to make the ServiceGroups work (download ConfigValidator.zip (61.44 KB)):
1. ValidateBusinessActionNames
private bool ValidateBusinessActionNames(StringBuilder report)
{
string serviceActionName = null;
string pipelineName = null;
bool baServiceActionFound;
bool result = true;
IDictionaryEnumerator businessActionEnumerator = _businessActDefSettings.BusinessActions.GetEnumerator();
while ( businessActionEnumerator.MoveNext() )
{
BusinessActionSettings baSettings = (BusinessActionSettings)businessActionEnumerator.Value;
// Checking if the current business action specified in the configuration
// is a compenstae business action or not. The checks for service interface
// service implementation pipeline should be done only if the the business
// action is not specified as compensate business action for any of the existing
// business actions.
if (IsCompensateBusinessAction(baSettings.Name))
{
continue;
}
IDictionaryEnumerator pipelineEnumerator = _pipelineDefSettings.ServiceInterfacePipelines.GetEnumerator();
baServiceActionFound = false;
while ( pipelineEnumerator.MoveNext() )
{
ServiceInterfacePipelineConfig pipelineCfg = (ServiceInterfacePipelineConfig)pipelineEnumerator.Value;
serviceActionName = pipelineCfg.ServiceName;
pipelineName = pipelineCfg.Name;
bool isInServiceGroup = false;
if ( pipelineCfg.ServiceGroup != null && pipelineCfg.ServiceGroup != String.Empty )
{
// get the service group for the current pipeline config and check that the service group contains the business action
ServiceGroupConfig serviceGroup = (ServiceGroupConfig)PipelinesConfig.Config.ServiceGroups[ pipelineCfg.ServiceGroup ];
isInServiceGroup = serviceGroup.Services.Contains( baSettings.Name.Trim() );
}
if( (String.Compare(baSettings.Name.Trim(), serviceActionName.Trim(), true) == 0 ) || ( serviceActionName == “*” ) || ( isInServiceGroup ) )
{
baServiceActionFound = true;
break;
}
}
if ( baServiceActionFound == false )
{
result &= false;
report.Append(Resource.ResourceManager.FormatMessage(Resource.MessageKey.ServiceInterfacePipelineMissingForBAErrMsg, baSettings.Name));
break;
}
pipelineEnumerator = _pipelineDefSettings.ServiceImplementationPipelines.GetEnumerator();
baServiceActionFound = false;
while ( pipelineEnumerator.MoveNext() )
{
ServiceImplementationPipelineConfig pipelineCfg = (ServiceImplementationPipelineConfig)pipelineEnumerator.Value;
serviceActionName = pipelineCfg.ServiceName;
pipelineName = pipelineCfg.Name;
bool isInServiceGroup = false;
if ( pipelineCfg.ServiceGroup != null && pipelineCfg.ServiceGroup != String.Empty )
{
ServiceGroupConfig serviceGroup = (ServiceGroupConfig)PipelinesConfig.Config.ServiceGroups[ pipelineCfg.ServiceGroup ];
isInServiceGroup = serviceGroup.Services.Contains( baSettings.Name.Trim() );
}
if( (String.Compare(baSettings.Name.Trim(), serviceActionName.Trim(), true) == 0 ) || ( serviceActionName == “*” ) || ( isInServiceGroup ) )
{
baServiceActionFound = true;
}
}
if ( baServiceActionFound == false )
{
result &= false;
report.Append(Resource.ResourceManager.FormatMessage(Resource.MessageKey.ServiceImplPipelineMissingForBAErrMsg, baSettings.Name));
break;
}
}
return(result);
}
2. ValidateImplPipelines
private bool ValidateImplPipelines(StringBuilder report, string serviceActionName)
{
bool result = true;
BusinessActionSettingCollection baSettingCollection = _businessActDefSettings.BusinessActions;
foreach(DictionaryEntry entry in _pipelineDefSettings.ServiceImplementationPipelines )
{
ServiceImplementationPipelineConfig config = (ServiceImplementationPipelineConfig)entry.Value;
if ( ( String.Compare(config.ServiceName.Trim(), serviceActionName.Trim(), true) == 0 ) || (config.ServiceName.Trim() == “*”) )
{
result &= ValidateHandlers(report, config, JoinPoint.ServiceImplementation);
// Checking if the service implementation pipeline is default
if ( config.ServiceName.Trim() != “*” )
{
// if a service group was configured, check that each service action on the servicegroup has a corresponding BA
if ( config.ServiceGroup.Trim() != String.Empty )
{
ServiceGroupConfig serviceGroup = (ServiceGroupConfig)PipelinesConfig.Config.ServiceGroups[ config.ServiceGroup ];
foreach( string service in serviceGroup.Services )
{
BusinessActionSettings baSettings = baSettingCollection[ service ];
result &= ValidateAssemblyInfo(report, baSettings.TypeName, “business action”);
result &= ValidateBusinessActionInvocationModes(report, baSettings);
}
}
else
{
BusinessActionSettings baSettings = baSettingCollection[config.ServiceName];
result &= ValidateAssemblyInfo(report, baSettings.TypeName, “business action”);
result &= ValidateBusinessActionInvocationModes(report, baSettings);
}
}
break;
}
}
return(result);
}
Great week! (Chile)
January 7th, 2005
This week I did an architecture review together with German Marin, from Microsoft Consulting Services Chile for an MS partner, Novared, who is willing to implement a large application including Biztalk in the Middleware to conceive a unique customer database. Novared wanted to make the decision whether to use or not MBI 3 as the business framework in cooperation with Biztalk.
Happily, after one week implementing a proof of concept they decided that MBI will be the framework they will use from now on for their applications. Indeed, they realized that using it, will lead to:
- shorter development time;
- better support;
- improvement on the development team workload distribution;
- enhaced quality on the solution;
- opportunity to create a base framework and have isolated development teams that implement the business actions
- and some other benefits.
The proof of concept included among other things:
- Single and Batch actions;
- Command Pattern & Service Oriented approach;
- Request-Response sync communication with Biztalk 2004 orchestations;
- Business Event publishing using Output Providers;
- use of the MSMQ transport to inject data to Biztalk;
- discussion of BAM (Business Activity Monitoring) in conjuction with MBI;
- Authorization Manager (AzMan) integration within MBI;
- Extensibility and Flexibility of the pipe & filters pattern;
I’m leaving Chile with a lot of ideas spinning on my head. Specially regards EDRA / MBI 3 / Biztalk Server 2004 integration. I splashed the first ideas on under: EDRABiztalkIntegration
EDRA 1.1 Final Bits
November 22nd, 2004
EDRA 1.1 is released. You can download it from http://www.southworks.net/edra/builds.aspx
From Hernan de Lahitte blog
This version has improvements in the following areas:
â— Tooling & Wizards
â— New & Enhanced Handlers
â— Better Configuration Support
â— Performance gains in specific areas
â— Bug fixing (as usually happens with upgrades)
The main new features that you will find are here:
â— Wizards. The following wizards are included:
â— Create New Solution. This wizard helps you create a new solution with the
EDAF code base.
â— Add Business Action. This wizard helps you add a business action to a project
in your EDAF solution.
â— Expose Service Action on a Transport. This wizard helps you expose the
business action on one of the available transports: InProc, Message Queuing,
Remoting, or Web service.
â— In-Proc Service Interface. Allows the pipeline and handlers to be executed in the
same process as the host environment.
â— TokenAuthentication handler. Used for custom authentication scenarios; allows
the first authentication to occur using a user name and password, and then the
handler issues a high-entropy token that can be used for authentication on
subsequent Web service requests.
â— DuplicateMessage handler. In addition to existing functionality, added a
configurable reject mode to the handler to allow duplicate messages to be rejected.
â— Additional runtime configuration validation. Moved logic from the external
configuration validation utility into the runtime so that as a configuration file is
modified, validation will automatically occur.
â— Configure exception shielding. Added a configurable mode so that exception
shielding can be enabled or disabled. Exception shielding is a helpful feature for
production environments where an exception should not provide the client with
internal information (such as a connection string). During development and
testing however, it is useful to see the exceptions that are raised.
â— Improve Performance. The following areas have been tuned to increase
performance:
â— SyntacticValidation handler by caching the XSD and compiling it after loading.
â— DCOM dispatching transport by creating a proxy pool.
â— WebService interface transport by optimizing stream handling.
â— Binary Application Template Solution. Can be used to demonstrate how the
EDAF could be deployed and used within a large organization after EDAF has
been customized to meet your requirements. The template references the binaries
instead of the EDRA source code projects. This makes the resulting Visual Studio
solution easier to develop with because the solution is easier to navigate and it
reduces compile time.
â— Visual Basic .NET Application Template Solution. Can be used as a starting
point for creating applications in Visual Basic .NET. The template still references
the EDRA framework’s Visual C# .NET projects.
â— Visual Basic .NET Code Snippets included in the documentation. You can use
these snippets with the Visual Basic .NET Application Template Solution and
while you step through the Tutorial and the Developer’s Guide.
â— WSE Support. Explains different ways of configuring the service interface with
Web Services Enhancements 2.0 for Microsoft .NET (WSE).