text:
"Sometimes the road less traveled is less traveled for a reason."
- Jerry, in "The Baby Shower"
I'm not an expert in XSLT, nor am I a fan of it. But although my feeling for XSLT (which I'm sure is mutual) are cold and hostile at best, I recognize it as sometimes the only solution to the problem. Recently, I've come across two scenarios where it was the only way to solve the problem, and since I spent way too much time on it, I thought it be a good idea to share it. If not to anyone else, at least to myself as I don't want to do this again…
The first scenario we had to send a file to a destination, and the consumer of the message requested that we'd use specific prefixes for the namespaces. BizTalk Server sets these namespaces for us starting from ns0, ns1…ns*. There isn't built in way for us to control this, and given the complexity of hieratical structures from different namespaces I can understand why.
However in my case, as I said, the consumer of the message required the namespace to be set to "tns". My first approach was to create a pipeline component and use the XmlTranslatorStream which comes as part of the Microsoft.BizTalk.Streaming. The XmlTranslatorStream allows derived classes to intercept XML node translation through virtual methods such as TranslateStartElement.
public class XmlNamespaceHandlerStream : XmlTranslatorStream
string _fromPrefix;
string _xmlNamespace;
string _toPrefix;
protected override void TranslateStartElement(string prefix, string localName, string nsURI)
if (prefix == _fromPrefix && nsURI == _xmlNamespace)
base.TranslateStartElement(_toPrefix, localName, nsURI);
else if (nsURI == _xmlNamespace)
base.TranslateStartElement(null, localName, null);
base.TranslateStartElement(prefix, localName, nsURI);
protected override void TranslateAttribute()
if (this.m_reader.Prefix != "xmlns")
/// <summary>
/// Intercepts the processing of the XML stream and changes prefixes from
/// a specific namespace to a new prefix.
/// </summary>
/// <param name="input">Inbound message stream. Eg inmsg.BodyPart.Data</param>
/// <param name="fromPrefix">The prefix to be changed. Eg ns0</param>
/// <param name="xmlNamespace">whatever namespace is associated with the fromPrefix</param>
/// <param name="toPrefix">Name of the new prefix</param>
public XmlNamespaceHandlerStream(Stream input, string fromPrefix, string xmlNamespace, string toPrefix)
: base(new XmlTextReader(input), Encoding.Default)
this._fromPrefix = fromPrefix;
this._toPrefix = toPrefix;
this._xmlNamespace = xmlNamespace;
The TranslateStartElement is called for every XML element, and if the prefix (and namespace) is the same as the one I like to change, I proceed with changing the prefix. To process the message in a pipeline component, I simply use like this:
inmsg.BodyPart.Data = new XmlNamespaceHandlerStream(
inmsg.BodyPart.GetOriginalDataStream(), // Inbound stream
this.FromPrefix, // Property of pipeline component
this.XmlNamespace, // Property of pipeline component
this.ToPrefix); // Property of pipeline component
The good thing with this approach is that it's done with a streaming pattern. However, the problem was that it moves all namespace declarations except the one I want to change from the root element to each element using it. This might not be a problem if the message is small, but in my case the message contained 100.000+ person elements. The inbound flat file format was about 20Mb and the original output using ns0 as prefix was close to 80Mb. After I changed the namespace prefix using the XmlTranslatorStream it was more than 140Mb. The additional namespace declarations added approximately 75%.
So although my intensions were good, I was forced to fall back to sworn enemy, mr XSLT:
<?xml version="1.0" encoding="utf-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="msxsl var s0 userCSharp" version="1.0"
<xsl:output method="xml" indent="yes"/>
<xsl:template match="ns0:PersonInfo">
<xsl:apply-templates select="@*|node()"/>
<xsl:template match="ns0:*">
<xsl:element name="tns:{local-name()}">
<xsl:apply-templates select="@* | node()"/>
<xsl:template match="cmn:*">
<xsl:element name="cmn:{local-name()}">
<xsl:apply-templates select="@* | node()"/>
<xsl:template match="@ns0:*">
<xsl:attribute name="tns:{local-name()}">
<xsl:value-of select="."/>
<xsl:template match="node()">
<xsl:apply-templates select="@* | node()"/>
<xsl:template match="@*">
I then used a pipeline component for do the transformation using the XslCompiledTransform class:
// Using a VirtualStream to limit memory resources from being used.
var outStream = new VirtualStream(VirtualStream.MemoryFlag.AutoOverFlowToDisk);
XmlTextReader xmlTextReader = new XmlTextReader(inmsg.BodyPart.Data);
XslCompiledTransform xsl = new XslCompiledTransform(false);
MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(Resources.[YOUR EMBEDDED XSLT DOC]));
XmlTextReader xsltTextReader = new XmlTextReader(stream);
XsltSettings settings = new XsltSettings(true, true);
xsl.Load(xsltTextReader, settings, new XmlUrlResolver());
xsl.Transform(xmlTextReader, new XsltArgumentList(), outStream);
outStream.Position = 0;
inmsg.BodyPart.Data = outStream;
inmsg.BodyPart.Charset = "utf-8";
return inmsg;
The second scenario was about sending information to a destination where the receiver of the message could not handle the entire message at once. So we had to split the message in chunks of 50.000 person records per message.
Again I turned to my sworn enemy. This time I created two templates with identical match attribute setting and a template mode attribute ("group" or "person") depending on if I was going to create a new group element or add the person element to the existing group.
I used the position() XPath function to determine the current count of Person elements, and a modular expression to determine if a group should be created.
<?xml version="1.0" encoding="utf-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="msxsl var s0" version="1.0"
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:template match="/">
<xsl:apply-templates select="/s0:SelectResponse" />
<xsl:template match="/s0:SelectResponse">
<xsl:apply-templates select="//ns0:Person[position() mod 50000 = 1]" mode="group" />
<xsl:template match="//ns0:Person" mode="person">
<xsl:value-of select="./ns0:customId"/>
<xsl:value-of select="./ns0:Identifier"/>
<xsl:value-of select="./ns0:firstName"/>
<xsl:value-of select="./ns0:lastName"/>
<xsl:template match="//ns0:Person" mode="group">
<xsl:apply-templates select=". | following-sibling::ns0:Person[position() < 50000]" mode="person"/>
I had never come across the need to execute rules based on message metadata until a colleague of mine asked me the other day. Which is surprising as we often define routing rules based on the message context.
The basic principle is simple, – Rather than using schema based facts, we use facts based on .Net assemblies. In this case IBaseMessageContext (Microsoft.BizTalk.Message.Interop). This works well in cases where you'd like to call the rule from within a pipeline, as the context of the pipeline message (IBaseMessage) is implementing the IBaseMessageContext interface.
If, on the other hand, you want to execute the rule form an orchestration we can't use an interface as a rule fact, as the CallRules Policy shape can't work with interfaces. In those cases we'd need to use a custom class (the one the is used by BizTalk is internal).
Before we create the rule you need to have your facts ready. The input fact is going to be the context object mentioned above but you need to create the output schema where you're going to store the result if the rule evaluates to true.
Open the Microsoft Business Rule Compose and create your policy and rule as you'd normally do. Then in the Fact Explorer select the .Net Classes tab, right-click the .Net Assemblies node and select Browse. The IBaseMessageContext interface is found in the Microsoft.BizTalk.Pipeline assembly. Select the assembly and expand the IBaseMessageContext in the tree view.
Drag the Read(String strName, String strNamespace) method to your rule condition:
If you haven't developed a pipeline component before you can use a nuget package like Default Breeze BizTalk Pipeline Component. Simply create a class library project and install the nuget package. Follow the steps at the top of the pipeline component file before implementing the Execute method.
public IBaseMessage Execute(IPipelineContext pc, IBaseMessage inmsg)
//Create a policy object based on the name of the Policy
Policy policy = new Policy("MessageContextSamplePolicy");
// Create the response document
XmlDocument doc = new XmlDocument();
doc.LoadXml(@"<ns0:BreTest xmlns:ns0=""http://BreWithPromotedPropertiesSample.BreTest""><Field></Field></ns0:BreTest>");
var responseDoc = new TypedXmlDocument("BreWithPromotedPropertiesSample.BreTest", doc);
//Execute the policy and pass the message context and the response docoument
policy.Execute(new object[] { inmsg.Context, responseDoc });
var responseXml = responseDoc.Document.OuterXml;
// Take action on the response XML...
return inmsg;
There are two problems to working with the context data together with orchestrations; Access the metadata and not being able to work with interfaces (CallRules Policy shape can't work with interfaces).
Within the orchestration we don't have the IBaseMessage from which we can easily access the context. Instead we got the XLANGMessage. The message context is not as easily accessible form the XLANGMessage as it is from the IBaseMessage. Thankfully Maxime Labelle provided insight of how this can be accomplished.
I solved these problems be creating my own class called XLANGMessageContext and from within the constructor I read through the metadata. The class also provide a Read method that will return the value for a specific property:
public class XLANGMessageContext
Hashtable _messageContext = null;
public XLANGMessageContext(XLANGMessage message, string name, string ns)
foreach (Segment segment in Service.RootService._segments)
IDictionary fields = Context.FindFields(typeof(XLANGMessage), segment.ExceptionContext);
foreach (DictionaryEntry field in fields)
XMessage msg = (field.Value as XMessage);
if (msg == null)
if (String.Compare(msg.Name, message.Name) != 0)
var key = new XmlQName(name, ns);
_messageContext= msg.GetContextProperties();
catch (Exception /* e */)
// do not provoke failure
// probably best to add some logging here
public object Read(string strName, string strNamespace)
var key = new XmlQName(strName, strNamespace);
var result = _messageContext[key];
return result;
Creating the rule is very similar to the messaging scenario, but instead of using the IBaseMessageContext object you'll use the Read method from the XLANGMessageContext:
In your orchestration, create a BreHelperComponent.XLANGMessageContext valiable called xlangMessageContext, and construct it in an Expression shape:
xlangMessageContext = new BreHelperComponent.XLANGMessageContext(myMessage);
Lastly add a CallRules shape and provide the parameters:
You can download the sample here.
The bLogical SFTP adapter has been around for a while now, since 2008 to be exact. It has been one of the most popular BizTalk related downloads on Codeplex, and even though BizTalk 2013 is now shipped with an SFTP adapter people still use it since it quite rich on features such as proxy support and more granular scheduling capabilities.
There has been lots of feedback, most of which I believe I've implemented or fixed over the years. However there was one issue I never got around to fix; – the receive location 'freeze' issue.
Luckily Greg Shap from New Zealand came along, fixed the issue and uploaded a patch on Codeplex. I've since added Greg to the project and he's fixed the issues along with an impressive list of other fixes and changes:
Download it from Codeplex
I want to take this opportunity to thank Greg for his work, and also apologise for not getting this post up earlier…
Greg started working in IT about 20 years ago in Auckland, New Zealand as a junior developer. Eventually, he gained customer exposure doing on site system installations and upgrades. Having newly acquired soft skills, platform and development experience the next natural career move seemed to be system integration. This is the role he has filled for the past 15 or so years in varying capacities. 5 years ago he crossed the ditch with his wife to Sydney, Australia and now specialise in BizTalk development and implementation.
Since I published the powershell cmdlets to restore BizTalk databases I got plenty of feed-back and suggestions. Lately my new friend and colleague Farhan, found use for it and got started fixing a few bugs i had laying around.
Now that it's all up and running I thought it be a good idea to move in to CodePlex.
Thank you Farhan.
This might be one of my shorter post, but I thought it was worth sharing. I've been working with a game lately and depend heavily on Azure Mobile Services. Microsoft has been kind enough to provide us with the Azure Mobile Services for Xamarin, which can be found here. Sadly thought, it does not include support for API's.
You can do this:
var profiles = App.MobileService.GetTable<UserProfile>();
But you can't do this:
var myProfile = App.MobileService.InvokeApiAsync<UserProfile>("me");
I find API's much more useful the working with the tables, so I was bit bummed out when I found out it wasn't supported. I solved this by simply using the HttpClient to make the calls to the API's. However that didn't work to good when enabling the authorization.
It took a bit of work with fiddler to find our what headers needed to be used. So I updated the calls to include these headers:
HttpContent content = new StringContent(payload);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
content.Headers.Add("x-zumo-application", Client.ApplicationKey);
content.Headers.Add("x-zumo-auth", Client.CurrentUser.MobileServiceAuthenticationToken);
var response = await client.PostAsync(url, content);
That did the trick, and I could now call the API with the permissions != Everyone.
- But I was still bothered by the lack of support for API's, since that meant I couldn't share my code across the platforms. Of course I could have used the HttpClient approach above with my Windows Phone clients, but that didn't seem right.
So I spent some time adding the missing InvokeApi* methods as Extension Methods. And you can download the code here:
To use it, simply download the MobileServiceClientExtensionMethods.cs file and add it to your project. You should update the namespace, and the just add the namespace in the using statement in the class where you want to make the call.
In all fairness, this post relates to Azure Service Bus in general and not specifically to Windows Azure BizTalk Services (WABS).
Azure Service Bus and WABS both rely on Azure Access Control Service (ACS) to authenticate users before calling the service. This type of authentication is often referred to as Federated Security. In most samples of how to interact with Service Bus or WABS, the client first calls ACS (using user name and password) to receive a token, which is later used upon calling the actual service.
Using a ACS Service Identity (service user) makes sense when the client is a system, where you'd probably let each system have its own Service Identity.
-But what if the client is a user, such an employee or customer, perhaps calling in from a mobile unit?
In such cases, you'd have to keep the Service Identity stored on the device/application. Part from the security problems related to some evil person hacking the (Android) phone and then uses the credentials for evil purposes, you can't do Authorization as every user is using the same credentials.
In such cases, you'd probably want to use some other directory than the one provided in ACS. In most cases Active Directory is likely to be the preferred choice.
Token Based Authentication can be a bit hard to understand, so I'll try to explain it using an analogy.
Imagine you're going on a vacation to a different country, and upon facing the scary customs officer, you smile and give him your VISA card. Take my word for it, it won't work, but the interesting part is why. Despite the anger he or she will direct towards you, i's not about you at all. In fact, they will never trust YOU!
-The problem is that they don't trust the VISA organization to vouch for your identity.
So we need to go to a trusted authority and ask them to vouch for our identity, in Sweden that would be the local police department. They won't trust you either, and will ask for some other proof, but more on that later. Let's just assume all goes well and they'll issue you a passport.
The passport holds information about you, some information is public others may be hidden or encrypted, but more importantly it is signed by a trusted authority.
With a passport in our hand, the officer now trust your identity (Authentication), and he will now proceed to check your criminal records and ask a bunch of questions to determine if he will allow you to enter the country (Authorization).
Leaving the analogy and getting back to Federated Security. It's pretty much the same thing. The Swedish Police department plays the role of the Issuer (ACS) the customs officer plays the role of the Relying Party Application (WABS or Service Bus), and the passport is of course the Token.
The difference between the analogy and Service Bus authentication, is that while the customs trust many different issuers, Windows Azure Service Bus ONLY TRUST ACS!
However, ACS can be configured to trust other issuers also referred to as Identity Providers. If we go back to the analogy, and the local Police department that issued the passport, –why did he trust you? There are actually a number of ways to prove your identity, but lets assume you'd use an ID. This is sometime referred to as a chain of trust.
This is how Active Directory come in play. Active Directory can be configured with Active Directory Federated Services (ADFS). ADFS is an issuer, and although Service Bus does not trust your ADFS, ACS can be trusted to do.
By adding your ADFS as an Identity Provider in ACS, you can authenticate yourself with ACS using a token provided by ADFS! ACS will then provide you with a new token which can be used to authenticate yourself with Service Bus.
Step 1: Ask ADFS to issue a token for ACS using Active Directory user name and password.
Step 2: Ask ACS to issue a token for SB, using a token issued by ADFS
Step 3: Call the service using the token provided by ACS.
Although it won't be sufficient for us, it's worth pointing out that ACS provides some level of authorization which you can read more about here. ACS can however not provide authorization based on AD group membership, as the group membership claim comes as a comma separated string, with all groups:
Eg: CN=Sales,CN=Employees,…,…,…,…,…,…,…,CN=Users,DC=MyDomain,DC=net
Before we dive into BizTalk Services I'd like to point out a couple "issues" you might encounter. In the case where your service is a REST service (such as with WABS), you'll face two problems, one small and one big. Both problems relates to the fact that Service Bus will remove your token after the token has been verified by Service Bus. In other words, the token is not for you!
This little problem can be worked around, by adding the token twice. One using the "Authorization" header, and the other using a custom header.
The potentially bigger issue relates to the HTTP header it self, or rather its size. Using IIS 7 that limit is 16KB, but might differ depending on the version of IIS. By propagating the group membership claims from ADFS to the token issued by ACS, the token can get pretty big (depending of the number of groups the user is a member of). Adding the token twice, and you might pass the limit. The good news is that this limit is configurable, but the problem can be difficult to identify, as it might not occur for all users.
Anyway, by adding the token twice we can now evaluate group membership and authorize the user within our service (SB) or itinerary (WABS).
The setup involves many steps, some of witch I'll assume you have already done. For instance, it's outside the scope of this post to set up ADFS and install the WABS SDK.
As the overall sample is complicated enough, we'll stick with a very simple itinerary .
The itinerary received the message using a One-Way bridge, and routs the message to either one of the queues, depending on if the user is part of any of the groups.
As described earlier, we need to add the token twice. Once for the Service Bus to do Authentication, and the other for us to do Authorization. To do this, double-click the One-Way bridge to open the bridge configuration.
Select any of the two Enrish stages, and click the Property Definition in the Property Window. Add a new property definition, and set the values as following:
I will call my custom header "AUTH", if you care to use a different name, just change the Identifier to what ever work for you.
Now that we have the token, we need to extract the group claim. To do this we'll need to create a Message Inspector.
Follow these steps to create your project:http://msdn.microsoft.com/en-us/library/windowsazure/dn232389.aspx
Here is the code I used:
public class AuthorizationInspector : IMessageInspector
const string GROUPCLAIM = "http://schemas.xmlsoap.org/claims/Group";
/// <summary>
/// The name of the custom HTTP header, Eg. "AUTH"
/// </summary>
[PipelinePropertyAttribute(Name = "AuthToken")]
public string AuthToken { get; set; }
/// <summary>
/// A comma separated list of authorized groups, Eg. Sales, Marketing
/// </summary>
[PipelinePropertyAttribute(Name = "InGroups")]
public string InGroups { get; set; }
/// <summary>
/// Processesing the Message
/// </summary>
/// <param name="message"></param>
/// <param name="context"></param>
/// <returns></returns>
public Task Execute(IMessage message, IMessageInspectorContext context)
bool isInGroup;
// Get the incomming SWT token
var token = message.GetPromotedProperty(AuthToken);
if (token == null)
throw new Exception(AuthToken + " token is null");
var requestedGroups = InGroups.Split(',');
var claims = GetClaims(token.ToString());
var groups = (from c in claims[GROUPCLAIM].Split(',')
select new GroupEntry(c)).Where(g => g.Type == "CN");
var isingroup = groups.Where(g => requestedGroups.Count(r => r == g.Name) > 0);
return Task.Factory.StartNew(() =>
message.Promote("IsInGroup", isingroup.Count() > 0);
catch (Exception ex)
throw ex;
* The GetClaims method and the GroupEntry class is part of the downloadable sample…
Compile your project. and go back to your Bridge configuration. Select the Enrich stage again (outer rim) and click the On Exit Inspector in the property window.
Type the FQN of your Inspector class in the Type field, Eg:
InspectorsLibrary.AuthorizationInspector, InspectorsLibrary, Version=184.108.40.206, Culture=neutral, PublicKeyToken=a1cd373975c6a197
Our newly created Inspector had two properties:
Build and deploy your bridge.
Open the Azure Management Portal, and browse to the Active directory. Select the namespace you're using for WABS, and select Manage to open the ACS portal. At the bottom of the navigation field, click Application Integration, and copy the WS-Federation Metadata URI. This file includes the Realm(s) of the ACS along with public keys etc, needed to configure the Relying Party Trust in ADFS.
Next open the ADFS Manager, and browse to the Relying Party Trust node. Right click the node and select Add Relying Party Trust… and click the Start button.
Keep the "Import data about…" option, and paste in the ACS WS-Federation Metadata URI. Click Next *4 and Finish (leave the checkbox to open the claims configuration).
In the Edit Rule dialog, click Add Rule, and Next. Give it a name and set the Attribute Store to Active Directory.
Select the "Is-Member-Of-DL" attribute and map it to the Groups claim.
Click Ok.
In the ADFS Manager, browse to the "Endpoints" node. Make sure the usernamemixed endpoint is enabled. Also make a note of the URI together with the FederationMetadata URI.
Go back to the ACS portal, and click Identity Providers. Click Add and select WS-Federation identity provider and Next.
Give it a name and set the login text (although will never use it). Paste or type the URI to the ADFS FederationMetadata. I ran into some problems here, and needed to copy it locally, and add it using the Browse option. This file includes all configured claims from ADFS (among many other things).
In the Used By section, deselect all applications but your WABS application.
To propagate claims from the ADFS token to the ACS token, we need to do one more step. Click the Relying Party Application node, and select your WABS application. At the bottom of the page, click the selected Rule Group. Click the Generate button, and select your new Identity Provider. Click Save.
Kudos to you if you made it this far!
If you download the sample, you'll find the MessageSender project which I originally got from here. I've made some modifications to make it work with ADFS. It generally comes down to two methods at the end of the MessageSender class.
Federated Authentication for Azure Service Bus
Azure Service Bus
BizTalk Services
The REST Start Kit for BizTalk Server is about providing support for GET, POST, PUT and DELETE operation, for both Receive and Send ports together with support for both XML and JSON.
In a former post, I showed how to expose REST services from BizTalk. However I never got it to work for GET operations and did not cover consuming other REST services through Send Ports. Consuming REST services was however greatly covered by Nitin Mehrotra in his post "Invoke ReSTful Web Services with BizTalk Server 2010". In fact I've included Nitins code in this solution to compete the REST Start Kit for BizTalk Server.
We are seeing a broader diversity among clients, hosted on various smart devices, running on different runtimes. Commonly among all these, is that applications are becoming commodity with a relatively short life-cycle. These applications needs to be rapidly developed using frameworks that can be re-used on other platforms. These and other factors are reasons we see a broad adoption of HTML5 and JavaScript today.
When developing these kind of applications, REST-based services are the preferred choice by far. Not only because it's easy to consume using JQuery (resource orientated JavaScript library), but equally important is the fact that REST is lightweight. -Bandwidth is not infinite on mobile devices!
Is this important to BizTalk? Yes it is! BizTalk Server is Microsoft's middleware platform. And as such it should manage REST. Arguably, many web-based application are built together with the service layer in the same application. But what happens when the client needs to access a back-end system like SAP or Oracle EBS? BizTalk can handle these with ease, however it can't bridge them to REST.
I've tried my best to make the start kit easy to use. However I do realize that many of the topics mentioned in the post are outside the comfort zone for many. But if you only care about HOW to use it, just skip the "How it works" section of the post.
I assume you already know what REST is, but never the less… Representational state transfer (REST) is a light weight protocol introduced by Roy Fielding around the year 2000. REST exposes services over HTTP, and can receive the request either through the URI, as in the case of a GET or DELETE operation, or through the payload (POST and PUT).
HTTP verbs are essential to REST, as REST is focused on entities or resources. For instance, you wouldn't expose a DeleteCustomerOrder method using REST. Instead you'd let the client access your recourses using the URI, Eg http://somedomain.com/Customers(1234)/Orders. If the user was to delete an Order (with an id of 5678), he or she would call http://somedomain.com/Customers(1234)/Orders(5678) using the HTTP DELETE verb. Using the GET verb, would return the actual order (given that it was not already deleted). If the resource was deleted (or never created), the user should receive a 404 status code.
POST (and PUT) works a bit different, as it receives it's request through the payload. This behavior is similar to SOAP (which only uses POST), however REST does not require a specific format (as opposed to SOAP which uses the SOAP envelope). In fact, you don't even have to use XML. Arguably, most clients call REST services using the JSON format.
If you don't know about JSON, it's a lightweight data format, commonly used by JavaScript and JQuery. Part from being less verbose then XML, it can be parsed to an object on the client which makes it easier to navigate (as oppose to using XPath).
As such, REST is all about HTTP, and works very much like the architectural principles of the World Wide Web. This is not an accident, as Roy Fielding was one of the principal authors of the HTTP specification.
Many more things could (and should) be said about REST (and RESTFul services), but this is not the place. However, it's important to point out the challenges we face using BizTalk:
This is somewhat problematic as all parameters for a GET or DELETE request is passed along with the URI, not the payload. Because of this, we need to intercept the request and create a "real" message using the parameters passed on by the URI. Using a dynamic URI's reveals yet an other challenge, as URI's are generally of a static nature for BizTalk. This is where the WebHttpBinding comes in to place, as it let's us define a base URI which our service (Receive Location) will listen to, regardless of what proceeds the base URI, Eg http://somedomamin.com/Customers(1234)
This was the most difficult problem to solve, and I'll get more into detail on this later. But the basic principle is that upon creating the message described before, it will add necessary meta data to the message to let BizTalk think this is a POST message.
If the consumer sends a GET request to the service, it also passes along information in the HTTP header, letting us know what format is expected. This is done through the "Accept" header, and could be either "application/xml" or "application/json" (there are others, but xml and json are the only supported ones using the REST Start Kit).
In case of a GET request, the outgoing message will get converted from XML to JSON using JSON.Net. If the consumer sends a POST request, the header could state: Content-Type: application/json. If this is the case, the incoming request will also be converted.
To make use of the REST Start Kit for BizTalk you need to expose your service or consume another REST service using the WCF-Custom adapter with the binding set to WebHttpBinding. In addition to selecting the binding, you also need to add a behavior; BizTalkRESTRequestHandler for the Receive Location and BizTalkRESTTransmitHandler for the Send port. These behaviors takes care of underlying pluming needed to make BizTalk accept REST based messages. This is all you have to do.
Regardless of what HTTP verb is used, BizTalk only exposes one usable method, – the "TwoWayMethod". This is because BizTalk does not really care about the actual message until it hits the pipeline. The TwoWayMethod does however care about the HttpRequestMessageProperty.Method to be "POST".
In order to send anything but a POST request to BizTalk, we need to intercept the message and convert it to a POST, or create a new message (GET & DELETE) and set the HttpRequestMessageProperty.Method to "POST". This action needs to be done in the SelectOperation method of an IDispatchOperationSelector behavior. As we need to use the WebHttpBinding, the behavior I've created inherits from WebHttpDispatchOperationSelector.
As said before, a GET or DELETE request passes it's parameters through the URI. You may have a base URI (declared on the Receive Location) set to http://localhost:8080/MyService while the consumer may call your service using http://localhost:8080/MyService/Bookings/2012/11, expecting all bookings from November 2012. I this case the BizTalkRESTRequestHandler behavior parses the URI and passes a BizTalkWebHttpRequest message to BizTalk that would look like this:
On the other hand, the user might use a bit more complex URI such as: http://localhost:8080/MyService/Employees?firstname=Caren&lastname=Smith
In this case you need to instruct the behavior how to parse the URI. If you've ever created a REST service using only WCF, you're probably familiar to the UriTemplate class, which is also used with the BizTalkRESTRequestHandler behavior. In the sample above, the UriTemplate could be: Employees?firstname={fname}&lastname={lname}
Which in turn would give you BizTalkWebHttpRequest looking like this:
<ns0:param name="fname">Caren</ns0:param>
<ns0:param name="lname">Smith</ns0:param>
Lastly, if the consumer requires an XML formatted response, the response from BizTalk will be sent straight back to the consumer. However, if the user expects JSON, the response need to be parsed. The DispatchOperationSelector behavior, described above, is only executed on the incoming request, so we need to add an other behavior, –a IDispatchMessageInspector to handle the outgoing response. This behavior is called BizTalkRESTResponseHandler and is added by the BizTalkRESTRequestHandler. In that sense it's internal and never exposed to you. Never the less, an IDispatchMessageInspector exposes two methods; AfterReceiveRequest and BeforeSendReply. The incoming header is added to the operation context in the AfterReceiveRequest method, and if the "Accept" parameter is set to "application/json", the response is converted to JSON and sent back, along with the WebBodyFormatMessageProperty set to WebContentFormat.Json.
If the client sends a POST or PUT request with a content type set to "application/xml", nothing is done but passing the message to BizTalk. Only it the content type is set to "application/json", it is then parsed to XML using JSON.Net. If you expect a message to match a BizTalk generated schema like this:
<ns0:Tweet xmlns:ns0="http://yourns.Tweet">
<Text>XML Rocks!</Text>
…the JSON message needs to included the namespace as:
{"ns0:Tweet":{"@xmlns:ns0":"http://yourns.Tweet","Author":"wmmihaa","Text":"XML Rocks!"}}
Also, all JSON properties will be parsed as Xml Elements, not Attributes!
As I said before, I've "borrowed" the consuming part from Nitin Mehrotra's sample, and added support for POST and PUT. To consume a REST service from BizTalk, the experience is pretty much the same as when exposing a service using a Receive Location. Set the Send Port Transport to WCF-Custom and the binding to WebHttpBinding. As with the Receive Location, we also need to add a behavior, - this time the BizTalkRESTTransmitHandler. This is a IClientMessageInspector. The actions of this behavior differs depending on the SOAP Action Header which you state in the WCF-Custom Transport Properties:
To consume a REST service you have to pass a BizTalkWebHttpRequest message to the adapter.
<ns0:param name="id">123</ns0:param>
<ns0:header name="Content-Type">application/xml</ns0:header>
The UriTemplate together with your parameters and the Send Port URI, will make up the actual To URI of the message. For instance, if the Send Port URI is set to http://somedomain.com the message above would be sent to http://somedomain.com/Events/123.
The response is at this moment never parsed, since most REST services does respond XML if asked to…
Except for adding necessary headers, the POST and PUT request does very little. Keep in mind though, you will always post a message to the URI set on the Send Port. You may find it tempting to use the same Send Port for all calls to a particular REST service, and although this will work for GET and DELETE, it wont work for POST and PUT. This is because the behavior has no knowledge of your intentions other than the payload. I could have solved this using SOAP Action Headers or some promoted property, but I didn't… (sorry).
The solution has four projects:
In order to see the behaviors in the Select Behavior Extension dialog you need to register the behaviors. This can be done in different places such as in the machine.config or the BTSNTSvc(64).exe.config file. However I find it more convenient to set it on the Receive- and Send handler in the BizTalk Administration Console, as you'd otherwise need to update the config files on all BizTalk machines (given you have more then one)
To do this, select the WCF-Custom adapter under Platform Settings –> Adapters in the BizTalk Administration Console. Double-click the Receive Handler and click the Properties button. Then click the Import button and browse to the WCF-Custom.BindingsExtension-ReceiveHandler.config found in both the solution folder and the installation folder. Repeat the steps for the Send handler using the WCF-Custom.BindingsExtension-SendHandler.config file.
If you want to register the behaviors in the machine.config file(s), just copy the behavior extensions to the <behaviorExtensions> element in the appropriate files.
The BizTalkWebHttpRequest is part of the bLogical.RESTSchemas project. Update the Application Name in the project properties, and deploy it to BizTalk.
6. Set the UriTemplate to match your expected incoming request. You can have multiple UriTemplates delimited using a pipe, eg
/Person/id={pId}| /Person/firstname={fname} | /Person/lastname={lname}.
This would make your service accept incoming GET or DELETE request like these:
http://localhost:8080/myservice/Person/id=123 http://localhost:8080/myservice/Person/fistname=Caren http://localhost:8080/myservice/Person/lastname=Smith
The BizTalkSampleApplication project has six samples:
The BizTalkSampleApplication is deployed to an appplication with the same name. The bindings file are included in the project. Before you try out the Consume* scenarios, make sure you've started the ExternalSampleApplication (just right-click the RESTService.svc file and select View in browser).
After you've deployed the solution to BizTalk, you need to redirect all FILE ports to the FILEDROP folder (part of the zip file)
All Consume* samples uses the same Receive Location; ReceiveConsumeREST and submits the message to the RESTService.svc in the ExternalSampleApplication.
To test the ExposeGET sample, you can use the browser and hit http:localhost:9999/Events/id=123 (any number will do)
To test the ExposeDELETE and ExposePOST you'll need to use some other tool like Fiddler.
To use the sample with Fiddler:
That's it. Let me know if you run into any issues. If you find it useful TWEET it!
This ports is no longer valid. An update can be found here:
Solutions for consuming REST services from BizTalk has been around for a while, and Jon Flanders has an excellent post about it. However, very little has been told about exposing REST endpoints, and even less using JSON. If you don't know about JSON, it's a lightweight data format, commonly used by JavaScript and JQuery. Part from being less verbose then XML, it can be parsed to a object on the client which makes it easier to navigate (as oppose to using XPath). This can come to good rescue for UI devs who apparently don't understand XPath ;)
I haven't yet been in a situation where I've had to expose REST/JSON endpoints from BizTalk, but as Kent Weare was being hackled by Bil Simser (MS Word MVP), I was eager to help out.
I begun by creating a custom WCF MessageInspector. My plan was to parse the incoming JSON message to an XML message, and also to change the HTTP verb from GET to POST if the client sent a GET request (BizTalk requires POST). As it turns out, the HTTP verb/Method, can not be changed in the IDispatchMessageInspector. If it was to be changed it would have to be earlier in the channel stack.
Prior to the MessageInspector is the OperationSelector, so I went on creating one implementing the IDispatchOperationSelector interface. After moving the logic from the inspector to the SelectOperation method in the OperationSelector, I ran into a new problem. The method was never called. It seems BizTalk is adding it's own OperationSelector through its HostFactory. As I wanted to host the Receive Location in a In-Process host (no IIS), making my own HosFactorythis wouldn't work either…
I was forced to dig even deeper in the WCF channel stack. Next step was a custom Encoder. Luckily I found a sample in the SDK which was pretty easy to use. The only problem was I couldn't access the HTTP verb. However after all this, I was willing to accept this trade-off.
Next up was the serialization and deserialization of JSON. Bil Simser pointed me to the JSON.Net project on codeplex, which made it very easy:
XmlDocument doc = new XmlDocument();
string jsonString = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None, true);
<script type="text/javascript">
jQuery.support.cors = true;
var jsonRequest = '{"Tweet":{"Author":"wmmihaa","Text":"BizTalk Rock!"}}';
function ReportOutage() {
type: 'POST',
url: http://yourdomain.com/submitTweet,
data: jsonRequest,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
error: function (xhr, ajaxOptions, thrownError) {
alert('error: ' + thrownError);
Please not the JSON above:
"{"Tweet":{"Author":"wmmihaa","Text":"XML Rocks!"}}". This is going to be translated to:
<Tweet><Author>wmmihaa</Author><Text>XML Rocks!</Text></Tweet>
As there are no namespace, you'd need to add one in the receive pipeline. Alternatively, you could add the namespace in JSON:
Which would come out as:
function ReportOutage() {
type: 'POST',
url: "http://yourdomain.com/submitTweet",
data: '{}', // empty parameter
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
error: function (xhr, ajaxOptions, thrownError) {
alert('error: ' + thrownError);
Empty parameters are casted to a message that looks like this: <EmptyJsonMessage/>. As you won't have an equivalent schema in BizTalk, you can't parse it using an XmlReceive pipeline. If you want to process the message in an orchestration, you'd need to set the message type of the incoming message to System.Xml.XmlDocument.
In this blog post we are going look at how to manage routing in the new Azure ServiceBus EAI CTP.
As a scenario, I'm going to send a request for information (RFI) to some of my fellow MVP's. To do that, I'm going to create a One-Way Xml Bridge, to receive the messages. After receiving the RFI message I tend to route it to one of three queues.
If you haven't already downloaded the SDK, you can do this here. After you've installed the SDK, you can sign in to the labs environment using a Windows Live ID.
Open Visual Studio 2010, and select Create Project. In the list of project templates, select ServiceBus, and Enterprise Application Integration. Give it a name and click Ok.
Right-click the project and select Add->New Item. At this time there are two types of artifacts you can add; Schemas and Maps. Select Schema and sett an appropriate name. In my case I set the name to RFI.xsd. Continue building up your schema. Notice, you don't have to promote any nodes as you'd have to do in BizTalk.
Double-click the BridgeConfiguration.bcs and drag a Xml One-Way Bridge from the toolbox to the canvas. This is going to be your entry point to your process, similar to a Receive Location in BizTalk. Set the name appropriately, and notice the Router Address which is going to be your endpoint in Azure ServiceBus.
As stated before, the incoming RFI message is going to be routed to any of the three queues. You might not your message relayed to a queue, and could there for use any of the other Destinations such as Relay- or External Service EndPoints. Either way, the principle of routing is the same.
Connect the Bridge with all Destinations.
Next we'll define the incoming message type(s). Double-click your Bridge (ReceiveRFI in my case). Click the plus button in the Message Types stage. Select the Message Type you created earlier, and click the arrow button on the right.
This is the interesting step, where we are going to promote some fields in the payload so that we can route on these in the next step.
First open your schema and select the node you care to use for routing (in my case Receive). Copy the Instance XPath from the Property window.
Then double-click the Bridge, select either of the Enrich stages, and then click the Property Definition button in the Property window. There are two Enrich stages, as you might be using a Transformation, in which case you might want to promote fields from either the original message or the transformed message.
For more information about transformations, have a look at Kent's post.
Set the Type to XPath, and paste the XPath expression in the Identifier text box. Select the Message Type and set the name of the property. Finish be setting the data type and click the Add button (+). Close the dialog by clicking the Ok button.
As you have promoted your property (or properties), you're now ready to set the Filter Conditions on each of the Connectors. Select one of the selectors and type the Filter in the Property window. Eg. receiver='SteefJan' or customerId=1234.
Before we deploy the solution, you need to create the queues. There are several tools for this, but with the samples comes a MessageReceiver project you can use.
Type MessageReceiver.exe <Your namespace> owner <Your issuer key> <Queue name> Create
After creating the queues verify they are created in the portal.
Right-click the project and select Deploy. Supply the secret.
Along with the MessageReceiver tool, you'll find a MessageSender project as well. Just type:
MessageSender.exe <Your namespace> <Your issuer key> <Your endpoint> <Path to sample file> application/xml
Use the MessgeReceiver to get the messages from the queues:
The WCF-SQL adapter provides support for multiple inserts through the Consume Adapter Service feature:
However, sometimes you might want to validate the data on the SQL side before before making the insert. For instance, if you have a collection of Customers, where some of them might already exist in the database, and should only be updated. In such a case, you'd have to first make a database lookup, to determine the state of the Customer and then make either an insert or update.
In such a case, using user-defined table types might be your solution. User-defined tables are similar to ordinary tables, but can be passed in as a parameter.
In my sample, I have a Contacts table, and I'm receiving a collection of Persons where some entities are new and some are to be updated.
The user-defied table type will serve as our contract.
CREATE TYPE [dbo].[InsertContactRequest] AS TABLE
[PersonNo] [varchar](50) NOT NULL,
[FirstName] [varchar](50) NOT NULL,
[LastName] [varchar](50) NOT NULL,
[Phone] [varchar](50) NOT NULL,
PRIMARY KEY CLUSTERED ([PersonNo] ASC)WITH (IGNORE_DUP_KEY = OFF)
The stored procedure takes the user-defined table type as a parameter (@insertContactRequest), then updates all existing rows and inserting all new once.
CREATE PROCEDURE [dbo].[sp_InsertContacts] @insertContactRequest InsertContactRequest READONLY
UPDATE dbo.Contacts
SET Phone = r.Phone
FROM dbo.Contacts c
JOIN @insertContactRequest r on r.PersonNo = c.PersonNo
INSERT INTO dbo.Contacts (PersonNo, FirstName, LastName, Phone)
SELECT r.PersonNo, r.FirstName, r.LastName, r.Phone
FROM @insertContactRequest r
WHERE r.PersonNo not in(SELECT PersonNo FROM dbo.Contacts)
1. In you Visual Studio, right-click the BizTalk project and select Add->Add Generated Items. Select Consume Adapter Service.
2. In the Consume Adapter Service dialog, click the configure button to set the credentials. Click Ok, and then Connect.
3. In the tree-view, select Strongly Typed Procedures, and select your stored procedure in the right pane. Click Add and Ok to generate the schemas.
4. Make your transformation, and complete your solution.
Here is the sample source.
(Kudos Daniel Östberg)
If you're a consultant like me, you've probably got similar calls from some key account manager, as I did yesterday:
KAM: Hi Mikael. I'm just about to close this super big deal, with this super important Customer. Me: Really! Good for you. KAM: Yeah, we're really close. But to rap it up, I was wondering if you could help me out a bit… Me: Sure. What do you have in mind? KAM: Could you come with me to meeting with the customer on Monday? (this happens on Thursday 6PM) Me (getting suspicious): mmm…What do you want me to do? KAM: A demo! Me: Demo of what? KAM: The customer want us to show how to integrate Dynamics CRM Online with SAP using BizTalk. Me: What? KAM: Yes, yes. The customer wants us to show it live! You know, they want to see you do it… Me: ARE YOU HIGH? (I didn't actually say that, but I was thinking it) Me: It will not happen! I haven't worked with SAP since 3-4 year ago. I've never worked with CRM Online (or off-line for that matter). I'm fully booked tomorrow, and I want to spend the weekend with my family as X-mas is coming up. KAM: But we need to close this deal… Me: NO! KAM: Please… Me: No way! (Yada, yada, yada) Me: Ok, I'll give it a try (I'M SUCH AN IDIOT!!!!!)
To begin with, if you want to integrate with CRM Online, you have two options. Either use an un-typed web-service API or use a tool called CrmSvcUtil.exe to create a proxy class for you. Each of these comes with some challenges and limitations:
Using an un-typed web service, can of course be somewhat messy, but the SDK provides you with the schemas you need (more on that later). The biggest challenge, however, is to authenticate to the service as it assumes you're using Windows Live Id. Authenticating against the service would require an additional four calls to the service to finally get the authentication tokens needed to create the security header. An then figure out a way to to add the headers in a pipeline. The steps needed are described by Girish Raja here.
The proxy created using the CrmSvcUtil is quite nice, since it's typed, but of course I can't use it in a send port. I would have to make the call using the inline-send approach from within an expression shape in an orchestration. And thereby loose the built in re-send functionality and more, that ships with BizTalk.
As none of these approaches was acceptable, I begun looking for other alternatives. What I really wanted was an authentication behavior, that I could add to my WCF-Custom send port adapter.
What I needed was a Message Inspector that would build up the security header as Girish Raja did in his sample, and then add that header to the SOAP envelope. This class is called LiveIdAuthenticationMessageInspector and inherits from IClientMessageInspector. This gives two methods to my class: BeforeSendRequest and AfterReceiveReply.
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request,
System.ServiceModel.IClientChannel channel)
string securityHeader = HeaderHelper.GetSecurityHeader(this._username, this._password, this._crmUri);
new SecurityHeaderSerializer(securityHeader),true));
return null;
In the BeforeSendRequest method is where I can add the security header to the message before the message is sent out. The the BeforeSendRequest method I call a helper class returning the actual header. The GetSecurityHeader method is going through four steps to build up the header:
(This sample does not cache the tokens! I strongly suggest you add some caching logic before you run this in production)
After the header is created it is added to the request, using a custom serializer, as it would otherwise be HTML encoded.
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
Trace.WriteLine("[bLogical] LiveIdAuthenticationMessageInspector:AfterReceiveReply called");
int index = reply.Headers.FindHeader("Security", WSSecurityUsernameTokenProfileNamespace);
When BizTalk (or any other WCF client) receives the response it will throw an exception, as it doesn't understand the Security header. I might have gone away with adding the http:http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd schema to BizTalk, but as I don't need it, I just removed it from the header on the way back.
Part from the Message Inspector, I also added an EndpointBehavior and a BehaviorExtensionElement. The LiveIdAuthenticationBehaviorExtensionElement needs to be registered in the configuration using the behavior in BizTalk
After you have registered the behavior, you can focus on the normal BizTalk tasks like building orchestrations and mappings. To get started with consuming the CRM Services, have a look at Richards post. The only thing I'd like to emphasis is that the correct schemas are part of the SDK (sdk\schemas). After you run the Consume WCF Service Wizard, remove all schemas and replace them with the the once in the SDK. Better yet, put all those schemas in a separate schema project, and reference that project from other projects where you're using them.
Open up the LiveIdAuthentication project, build and add it to the global assembly cache.
(sorry about the formatting).
<add name="liveIdAuthentication" type="LiveIdAuthentication.LiveIdAuthenticationBehaviorExtensionElement, LiveIdAuthentication, Version=184.108.40.206, Culture=neutral, PublicKeyToken=698ceec8cebc73ae"/>
You can do this either in a config file (machine.config or BTSNTSvc[64].exe.config) or in BizTalk (WCF-Custom Send handler):
I prefer the later as I would otherwise need to make the changes to all the servers in the group. Just copy the extension element above, into a config file, and import the file from the Transport Properties dialog above. Or you can point to the app.config file in the sample.
Open the send port and click the Configure button to open the WCF Transport Porperties. Select the Behavior tab and right-click the Endpoint behavior node, and select Add extension. Select the liveAuthentication extensions. Select the extension and set the properties.
You're done.
Use this code as you like, and on your own risk. If you make improvements, I'd appreciate if you notify me. One thing I know could be done better, would be to cache the tokens and re-use them for the next call.
Download the Dynamics CRM LiveId Authentication Behavior sample here.
Every year my employer hosts a two day event all related to integration or service orientation. Around 450 people attended this year, which I assumes makes it the biggest event of the year in the integration space, with more then 25 sessions on four different tracks. All Microsoft related session were recorded and are now available.
Enjoy, an we hope you join us next year.
If you are in the integration space, you'll find all kinds of interesting and valuable sessions in any of the four tracks; Strategy, Public, Microsoft and IBM. Each track has six sessions with speakers from both Enfo Zystems and other partner organizations such as Microsoft.
At Thursday evening, you're invited for dinner with entertainment, which of course will be a great time to meet up with other integration geeks (such as myself…)
And the best of all… –It's all free, so sign up now!
The event starts on the 13thof October and covers four tracks, each with six sessions. The Microsoft platform track will cover the following six sessions:
BizTalk Server has been at the center of Microsoft's Middleware platform for a number of years, to provide a rich set of capabilities for services and integration. AppFabric, both on-premise and on Windows Azure provides additional capabilities as well as some overlapping ones. So what is the strategy here, what is Microsoft up to long term and short term? How will this affect solutions you create and what opportunities will it create for your company? In this session, you will get the answers to these questions. Presenter: Marcus Gullberg, PM Microsoft Sweden
Microsoft's Middleware platform is currently undergoing a change, which in turn offers different solutions with unique capabilities. What is available today, and how can we today make these solutions work together? This session will cover Microsoft BizTalk Server, Windows Server AppFabric and Azure AppFabric, to show how you can extend the reach of your integration platform outside your own domain. Presenter: Mikael Håkansson, Solution Architect, Enfo Zystems
Where is the future of Microsoft's Middleware platform going? How will we design, build and monitor our solutions in the future? What capabilities will we have in our tool box? These and many other questions will be addressed in this session, which will focus on Microsoft Azure AppFabric Platform and emerging capabilities such as Composite Application, Access Control Center, Caching, ServiceBus Topics & Queues and other enhancements, and Integration. Presenter: Johan Hedberg, Solution Architect, Enfo Zystems
Caching is an integral part of an overall scaling strategy. By properly utilizing caching you can radically increase the number of concurrent users your application can service. Much of the caching information available to users today only focuses on server side caching. Server side caching is important, we will cover it in this session, and we will show concrete techniques to maximize its effectiveness . However, this session will also cover client side caching techniques. Client side techniques are often overlooked in spite of the fact that in order to truly hit extreme scale those techniques are nearly always necessary and often end up being bolted on after the fact. After attending this session, the attendees will walk away with the concrete knowledge and code necessary to immediately improve their WCF application performance. Presenter: Paolo Salvatori and Mikael Håkansson
The Windows Azure AppFabric Service Bus and Windows Azure Connect are the foundation for building a new class of distributed and hybrid applications that span the cloud and on premises environments. The Service Bus is an Internet-scale Service Bus that offers secure, scalable and highly available connectivity and messaging capabilities. Windows Azure Connect provides a network-level bridge between applications and services running in the cloud and on-premises data centers. Windows Azure Connect makes it easier for an organization to migrate their existing applications to the cloud by enabling direct IP-based network connectivity with their existing on-premises infrastructure. In this session you will see how to integrate these technologies with BizTalk Server to create solid and cloud-ready solutions. Presenter: Paolo Salvatori, Senior Program Manager Microsoft
Baseline provides a comprehensive framework that supports the design, development and maintenance of systems integration solutions. In this session we will provide a practical example of how to use the Baseline methodology and tools to refine project requirements into a working BizTalk solution – tested, documented and packaged, ready for deployment in BizTalk Server 2010. In the process we will use Baseline documents and the Baseline Portal to highlight the main strengths of Baseline. Presenter: Martin Rydman and Mikael Håkansson
Thanks to everyone attending my TechEd session on Thursday. You can find the scripts I was running here (sorry I didn't put them up earlier). Let me know if you have any trouble.
If you didn't attend, you can view the session online here.
Good luck
Thanks to everyone attending my session on integration with
Office365 and on-prem applications.
All demos can be downloaded from here: http://blogical.se/files/folders/downloads/entry25152.aspx
I recommended you to start downloading the AppFabric SDK CTP,
in which you'll find the ClientAccessPolicyPublisher sample I was running in
the last sample: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d89640fc-c552-446e-aead-b1e0d940f31b


text:
March 05. 2014 6:00PM
House says no to bill to reduce NH meals tax
By GARRY RAYNO
State House Bureau
— The cost of eating out will not change after the House killed a bill Wednesday to reduce the tax on meals at restaurants and in grocery stores from 9 percent to 8 percent.
House Bill 1597 would have lowered just the meals portion of the rooms and meals tax from 9 to 8 percent while leaving the rate at 9 percent for hotels, motels and rental vehicles.
Supporters of the bill said it would reduce the cost of eating out allowing restaurants to attract more business and encouraging local residents to dine at restaurants.
And they said the cut would be revenue neutral as the rooms and meals tax receipts are about 5 percent more than anticipated.
"More people in the state will have more money in their pockets," said Rep. Russell Ober, R-Hudson, "and we'll still get the same amount of revenue to spend in our budget."
But bill opponents disagreed saying it is just speculation additional revenue will be produced by the decrease.
While the rooms and meals tax is ahead of estimates other taxes are not, said House Ways and Means Committee Chair Susan Almy, D-Lebanon. "We don't have 24 million to play around with," she said. "If you vote for this, you need to figure out where to cut $24 million a year."
Almy said when the rate of the rooms and meals tax was raised from 8 to 9 percent, the state agreed to increase the money for out-of-state tourism advertising.
That increase would likely be one of the first reductions if the bill passes she said.
But those favoring a reduction said lowering the rate would make New Hampshire restaurants more attractive to residents in other states along the state's borders, particularly in Massachusetts where the push is on to reduce their sales tax to 4 percent.
"The dirty little secret is New Hampshire residents pay the lion's share of the rooms and meals tax," said Rep. Emily Sandblade, R-Manchester. "I know there is no free lunch, but I know it could be more affordable."
The meals portion of the tax produces about 80 percent of the roughly $235 million state budget writers expect to receive from the levy this year.
After the vote House Minority Leader Gene Chandler, R-Bartlett, lamented the outcome.
"While some would like you to believe the meals tax is primarily paid by those who visit our state as tourists, the reality is that you and I pay it on our morning coffee or bagel, our grilled cheese at lunch, or our pizza dinner with the family," Chandler said. "Lowering taxes like the meals tax is something I hope we continue to discuss as ways to help families keep more of their hard earned money in their own pockets."
The House killed the bill on a 184-148 vote.

subset: commoncrawl


text:
lncal1

08/30/2012,09/18/2012,09/20/2012,09/27/2012,10/04/2012,10/11/2012,10/18/2012,10/25/2012,11/01/2012,11/08/2012,11/15/2012,11/29/2012

840:153g:Projects/project26

yyyy/MM/dd

OWWNB

Y

|Customize your entry pages
Team Members
The cloning of Atrolysin A from Crotalus atrox
We are going to clone the gene for the toxin Atrolysin A,Genbank accession number U01234. The toxin is produced by Crotalus atrox, which is the Western Diamondback. The E. coli that we will use as a vector will not be effected by the toxin if produced. The Atrolysin toxin affects platelet adhesion inside the body. The toxin works best at a pH of 8.0 and denatures in an acidic environment. This is how the snake can eat its prey and not be affected by the venom. The Atrolysin A is only found in mRNA sequence so we have to isolate the coding sequence and amplify it with PCR. Once we have the gene isolated we need to amplify it and see if the coding sequence grows from its initial 1260 base pairs. If it does this means introns are in the sequence. If introns are involved we then must remove them. Removing them by splicing and PCR. We have also discovered a restriction site in our gene and it has to be removed by site directed mutagenesis. If we are able to isolate and clone the coding sequence, we will then test the protein on SDS gels against a control E. coli to see if the protein is present. Our primers we are using are Forward: 5' ATG GAA AGA CTC ACC AAA AGA TAT GTT GAC CTT GTC ATA GTT G 3'. The Reverse Primers: 5' TCA AAT CTG AGA GAA GCC AGA GGT TGA TTT GTA GGC TGT A 3'
Beginning Presentation: [[1]]
Final Presentation: [[2]]
"Agarose gel electrophoresis." OpenWetWare. October 2012. http://openwetware.org/wiki/Agarose_gel_electrophoresis.
Anderson, John. Part:BBa_I0500. 4 Aug. 2006. Registry of Standard Biological Parts. 4 Aug. 2006. http://partsregistry.org/wiki/index.php?title=Part:BBa_I0500.
"Crotalus atrox hemorrhagic toxin a, atrolysin a (Ht-a) mRNA, partial cds." National Center for Biotechnology Information. 2012. http://www.ncbi.nlm.nih.gov/nuccore/U01234.1.
Eguchi, Tomoko and Yukinori. High yield DNA extraction from the snake cast-off skin or bird feathers. 19 May 2000. University of Ryukyus. 19 May 2000. http://scholar.google.com/scholar?hl=en&q=getting+DNA+from+snake+skin&btnG=&as_sdt=1%2C16&as_sdtp.
Fetzner, James W. Extracting High-Quality DNA from Shed Reptile Skins: A Simplified Method. June 1999. Brigham Young University. June 1999. http://www.biotechniques.com/multimedia/archive/00014/99266bm09_14694a.pdf.
Site-Directed Mutagenesis. 22 Aug. 2012. Wikipedia. 22 Aug. 2012. http://en.wikipedia.org/wiki/Site-directed_mutagenesis.
"Standard PCR Setup." Openwetware. October 2012. http://openwetware.org/wiki/840:153g:Materials.
Important Results and Milestones
Recently Edited Notebook Pages


text:
Advanced Search |
Search Tips
Every bathroom has to satisfy a certain criteria, housing a sink,
toilet and …
For most of the world, the Spring and Summer months are
quickly approaching. …
We're always grateful to work with clients who trust and see the creative …
All prices are in EUR
Copyright 2018 gvega.
Sitemap |
Shopping Cart Software by BigCommerce


text:
We are sorry, this product is currently not available.
Minted + domino Art Print Challenge: we partnered with design marketplace Minted to find fresh up-and-coming art to feature on domino.com! From the thousands of submissions, we've uncovered 75 brand new pieces, 25 of which are exclusive to domino.
Standard Paper & Framing
A thick, matte art paper in a brilliant white hue. Standard framed art prints are custom fitted using plexi glass, a protective backing, bumpers and hanging wire.
White Premium Wood
• Handcrafted white wood frame.
• Frame width is .75" for dimensions 16 x 20 and smaller; 1.5" for dimensions 18 x 24 and larger.
Bright, bold and fresh, the original of this piece is an acrylic painting on canvas. The bright colors and bold brush strokes used are intended to infuse a sense of liveliness and vibrancy in any space. Use as a statement piece or a jumping off point for a unique space.
About the Artist Melanie Severin:
I'm a Canadian designer/artist, loving wife, and mom to 3 chicken farmers. We live in rural Alberta, Canada, and I work from a lovely home-based studio, surrounded by aspen forest, wildlife, and natural beauty. My work is heavily inspired by nature and strives to achieve that (im)perfect balance between sophistication and whimsy.
Artist Location: Lloydminster, Alberta, Canada.
For more ideas check out domino and MINTED art challenge


text:
I just had another window salesman knock on my door and tell me that switching out my windows can save me 40% to 50% on my energy bills. When I pressed him, he said that's for switching out metal double pane windows with his high efficiency triple pane ones here in Texas. He promised much higher savings when it comes to switching out my single pane metal ones.
I've modeled a lot of buildings for the Weatherization Assistance Program using the NEAT tool and windows have never ranked. Even Krigger and Dorsi say that windows have a long pay back period and are probably the last things you should do.
I have this conversation all the time with my wealthier client base. They always seem to have tight, double paned windows and want to switch them out before doing any air sealing or insulation. I end up talking them down. And it seems like the windows guys have an evangelical zeal to convert energy auditors to their way of thinking.
I'd like to see the research. Do you know of any studies on switching out windows? I'm specifically looking for switching out double paned metal windows that are fairly tight.
Views: 11862
The unfounded and excessive claims of window salesmen/women are responsible for the removal of the historic fabric of buildings around the country. The payback period for window replacement can be many decades in moderate climates. There are many tools for improving energy efficiency of historic buildings without removing original windows - including repair, caulk and paint, interior window coverings, storm windows and doors, and selective window sash replacement.
Hi Joel,
First, I hear ya...(eyes rolling :>) Amazingly, I heard through the grapevine similar about a state weatherization program doing just that too (it was NOT in Vermont however). About a year ago I was at a house conducting IR training that had brand new exterior doors, weather stripping and all, installed as part of "energy upgrades" and yet the building leaked like a sieve. Air sealing had not been addressed. The doors looked great, though!
Building Science Corporation might have some data on this. I'd recommend taking a moment to view their site, www.buildingscience.com
A great resource with many articles available for download. You might find something there.
There are a lot of things about windows that need to be considered before you replace them. If you are looking for a quick payback, immediate savings, you won't get it with windows. Paybacks are on the order of 20 - 30 years (depending on costs - windows and utilities) and if you use air conditioning. These are not the paybacks investment conscious folks are looking for, it is even hard to sell them a 5-year payback because that is too long. However windows will pay for themselves over their lives, unless you believe, as I was told by DOE that windows don't last that long, a 20-year EUL is max for WAP ARRA calcs apparently. Anyone know how long a window lasts? AAMA says 50 - 60 years if maintained properly - yet DOE says 20 years max. When pressed they told me that is because that is what the NEAT audit software uses, 20 years. Good reasoning, not building science though! Apparently the thermally-inept, BTU-sucking, moisture-condensing, mold-growing, sill-rotting, moderate-leaky, single-pane, 50-150 year old windows I see all the time don't last that long. There are ways to replace really old windows with high performance windows and still maintain the historic integrity of a house and not force.
In energy auditing programs like NEAT only the U-value and maybe the SHGC counts in the energy savings calculations. New windows are also much tighter and reduce infiltration which needs to be included in the SIR calculations to get the full energy benefits yet I've never seen a study as to how much infiltration they reduce, a lot of estimates and no hard studies. And who does pre and post blower door (pressure diagnostics) on a window replacement job to determine the infiltration reduction value new windows have. So give windows their due and add the infiltration reduction potential into your NEAT calcs and see what you get. All the non-energy benefits are great too, but those sell windows too.
If you check out the LBL Home Energy Pro on-line energy audit program they show that replacing old windows with high-performance windows is very cost-effective (I guess the folks who put that together didn't talk to the window guys) and very misleading. They based the savings calcs and the payback on the incremental cost of a high performance window versus a standard replacement window. Which is fine if you are building a new house or if you replacing your windows anyway, which I guess is what people do when their windows die at 20 years.
Nehemiah do you have any money for a study on infiltration reduction and window longevity? I'd love to follow window replacement crews around for a while doing pre and post pressure diagnostics. Darn, I forgot, window replacement sales have dropped off because folks can't borrow money easily anymore for their $1,000 per window replacements.
Windows will pencil out in many cases if DOE actually follows the congressional mandate for weatherization funds which state that measures have to pay for themselves over their lives and not their imposed 20-year max for measures in the NEAT audit software. In the 60 years my windows have existed they would have done that at least twice.
How much a window leaks is dependant on how leaky the home is. If you have not sealed the rest of the house then the windows will leak more....affected by stack affect.
Also the air that leaks in the windows is cleaner than air leaking through other places so it is not the first leak to get rid of.
Tuning up a window can greatly reduce the air lekage through the window and is mouch more cost effective.
If you are talking about comfort and energy savings that $12,000 will go a lot farther if a priority list is created and those steps are followed. An old house with minimal insulation can be air sealed and insulated for much less than the $12,000.
Like one of the post said we are salesmen. We need to selll people on the immediate benefit of comfort AND the increased vallue of the home. Buyers will pay more when they see it is cheeper to operate.
As far are replacing windows I tell people it is done for something other than energy efficiency.
DOE models lots of weatherization measures (for financial cost-benefit analysis) at 20 years life ONLY because of the peculiar mathematics of calculating Savings-to-Investment Ratios and discount factors. When you use a 3% discount rate, there's hardly any financial NPV return 21 years down the road, so they don't count it. The window could last another 30 years, but the financial return is negligible (in the peculiar world of cost-benefit analysis.)
The problem with this is that windows are just so freakin' expensive, because we expact so darn much from them. Light, air, security, operability -- it's a nightmare. It would be VERY ciost-effective to jerk out the window and build solid, insulated wall. But who'd pay for that??
So, the window guy is just a sleaze when he says the utility bills will go down enough to cover the whole cost. But windows do lots more that control energy, so people need to price the other functions they are buying.
As for infiltration -- we (Wisconsin MF Wx program) have done a little work on measuring window leakage directly (a la ASTM E783) with poly sheeting and a Duct Blaster. I've only done this in a few apartment buildings, but it's not technically beyond the capability of a relatively smart HERS rater. Just gotta have the willingness to invest the time and experiment on something new and interesting -- and you know how we all hate that!!
But if you measure some existing windows, and compare that number to the maximum 0.30 CFM50 allowed for new Energy Star windows, you can make a reasonable guess at the real energy savings from a window replace. They are better than 30 to 50 year simple payback, but not by much -- maybe 20 to 30 years!
All I can say is -- in the last four years, we've put $10K in energy improvements into our 100 year-old farmhouse. The original windows (at least 50 years old??) are still there, and we'll do lots more work on other things before we get that far down the list. There's lots of other things to do that will save more energy and money. Mama didn't raise no fool.
Does anyone have any data or info (anecdotal or otherwise) on the benefits of adding storms to existing windows? I've heard anecdotally that well-sealed storms provide a bigger air gap, and thus a higher R-value for the whole assembly.
I've seen some beautiful wood storms with excellent gaskets which are an attractive retro for older homes, at a fraction of the cost of all-new windows.
© 2018 Created by Home Performance Coalition (HPC) Powered by


text:
IncGamers: Yesterday night Microsoft held what it called a Celebrity Gaming Night in Manchester, UK. The event is being described as the "UK's first exclusive preview of the upcoming Xbox 360 blockbuster game Halo 4."
Sounds great. So, who attended?
Who gives a sh*t about celebrities at game shows. Let the games be the celebrities, as they should be! It only makes people think your game is too crappy to stand on its own legs if you have to bring a bunch of celebrities, girls and whatnot to get people to notice your game.
I think this is more an indictment of the U.K. celebrity power than it is an indictment of the impact of Halo 4 or gaming. Hell, I think half of the top U.K. celebrities are working in Hollywood, U.S.A. than they are in the U.K.
I can guarantee the launch party in the U.S. will have far more star power than this celebrity gaming night.
edit: and as noted above...if the game is good....it doesn't need celebrity support.
'Star power' gets us actors hired for movies based upon how impressive their name will look on the poster rather than how well they fit the role. Star power gets us big glossy award ceremony lip syncing 'performances' . Star power gets us the Kardashians. Keep star power away from gaming please.
TOWIE arn't celebs, they are scum and they ruin television thats just as bad a hitler showing up way to get the brain dead monkeys to turn up MS.


text:
SPRINGFIELD (AP) – It's too early for the Legislature to take any action over the indictment of a state representative on federal bank fraud charges, the Illinois House Republican leader said Friday.
Chicago Democrat La Shawn Ford, meanwhile, made a plea for his colleagues to allow him to continue to serve. Ford was indicted Thursday, becoming the second member of the House to face federal charges this year.
"I hope that my constituents will continue to accept me as their state representative," Ford said Friday in a written statement after he filed a House resolution asking fellow legislators to remain neutral in the matter.
Prosecutors allege Ford made false statements to a bank to get a $500,000 increase on a line of credit. They say Ford, who has also worked in real estate, told the bank he would use the money to rehabilitate investment properties but instead used the funds for expenses like car loans, credit cards, casino payments and his 2006 election campaign.
Ford says he's innocent. In his resolution, he said the charges against him have nothing to do with his work as a legislator and do not involve a violation of his oath of office.
House Minority Leader Tom Cross on Friday called the charges "very serious and very troubling," but said lawmakers need more information.
"It's just too early at this point to make a recommendation on House action based on information in the indictment and public statements from the U.S. Attorney's office," Cross said in a statement.
In August, lawmakers voted state Rep. Derrick Smith out of the House — the first such expulsion in more than a century. Smith was arrested in an FBI sting and is accused of accepting a $7,000 bribe in exchange for supporting what he thought was a grant application for a daycare center. He has pleaded not guilty.
Smith refused calls by Democratic leaders to take his name off the November ballot and won his seat back.
Cross' comments appeared to draw a distinction between the two cases.
"In our current information it does not appear that the charges against Representative Ford involve leveraging his state office for personal gain, which is a fundamental difference from the charges against Representative Derrick Smith," Cross said.


text:
So, what can Symbian developers expect? Well, some of this stuff we already knew, such as a rather massive overhaul of the user interface, which will be delivered over-the-air to existing Symbian^3 devices, while new devices will ship with some of the updates, with the remainder also sent over-the-air. "The first major update will arrive in summer, delivering a new home screen, new flexible widgets, new icons, a faster browser, new Navbar and a fresh look and feel to Ovi Store and Ovi Maps, including integration of social media services in Ovi Maps," Kochikar details.
Further into the future, Kochikar can't say exactly for how long Nokia will keep supporting Symbian devices. He does say that in markets where Symbian is very popular, such as China, India, Russia and Turkey, support may last longer than in other markets, which makes sense, obviously, Nokia hopes, at least, that when current Symbian users see their phones reach their end-of-life, they will switch to Windows Phone 7. Well, you can always hope.
As for Qt, there's a lot in the works there, according to Kochikar. "We are readying app analytics, in-app advertising, in-app purchasing, a new browser and hardware enhancements," he explains, "There are a lot of new things for developers to take advantage of in these soon-to-be-released APIs. We are continuing to explore Qt for use in other strategic investment areas as well."
Nokia, of course, is the company that brought mobile phones to every corner of the globe. The spotlight might be on Apple and Google right now, but their contributions to the mobile world pale into insignificance compared to the massive impact Nokia has had literally connecting people in every corner of the globe - and not just in rich western countries with some pretty-boy phones. This is still Nokia's strength; they sell one million feature phones every day, and so far, have sold a staggering 600 million (!) Series 40 phones.
And these phones can run Java applications. "We intend to drive more innovation and improvement in Series 40 developer engagement. We are continuing to develop easy-to-use tools and software developer kits to make it simple, easier and more affordable for Java developers to work with us," Kochikar writes, "For example, there is free signing for Java apps; the new SDK for Touch and Type UI is in the market now; plus we have plans for increased proxy browsing capabilities on our device and support for web apps."
This does look a lot like trying to appease Symbian and Qt developers with a rotting carcass wearing a princess dress. No matter how those Finns try to dress it up, the fact of the matter is that their future - assuming Nokia has one, the cynic in me wonders - is Windows Phone 7, and not Symbian or Qt.


text:
- Inside Athletics
- Tickets
- Fan Zone
- Media Zone
- Social
- Shop
- E Fund
RALEIGH, N.C. (September 23, 2005) - The ETSU women's tennis team had a productive day of competition, splitting the team up and playing in the first rounds of the Residence Inn North Wolfpack Invitational hosted by North Carolina State, as well as Steve Baras Fall Tennis Classic hosted by Chattanooga.
"I'm happy we were able to play strong competition to see where we are at," said head women's tennis coach Steve Brooks. "We played tough matches today and we have tough ones tomorrow, but we are fighting right along with the best in the region."
Sandi Knight (
In B2 singles Tara Byrne (
In the A1 doubles bracket, Volobueva/Knight lost to Jiskrvova/Kapininska of
ETSU sent two players to
Eighteen teams are scheduled to compete this weekend at the N.C. State event, including; Armstrong Atlantic State, Auburn, Campbell, Charlotte, Coastal Carolina, East Carolina, East Tennessee State, Elon, Georgia, Hampton, High Point, James Madison, Liberty, NC State, UNC Greensboro, Western Carolina, Winthrop and Wofford.
Play continues tomorrow morning and wraps up on Sunday. For more information on Lady Bucs tennis, visit www.etsubucs.com/wtennis .


text:
39th Annual Mini Olympics
The 39th Annual Mini Olympics was held June 1, 2016 at Commerce Bank Field at Foley Stadium.
This event, run by the Physical Education teachers of the Worcester Public Schools, included over 400 student-athletes from each of the 34 Worcester Public Schools. They competed in track and field events. Students were chosen by their Physical Education teacher, for not only their outstanding abilities in track and field but also because they have shown positive leadership skills, great effort in all of their classwork and have the qualities needed to be a good teammate.
This exciting event included an opening ceremony that featured the Burncoat JROTC, a proclamation by the Mayor, and speeches by Worcester School Committee members and the new superintendent Maureen Binienda.
The winner of the 2016 Jimmy O'Donoghue award was announced. This award is given to a Mini Olympian that has shown great sportsmanship throughout the year.
This year we had some special guests. Through the support of Dick's Sporting Goods we have Jerome Singleton, a Paralympic athlete from the United States who competed and won many gold medals in Track and Field competitions around the world. In 2011 Jerome was known as the fastest amputee on the planet. He was there during the games to talk to students and sign autographs.
Our major sponsor is Worcester Fitness. This Worcester based business has been a sponsor of the Fall and Spring Mini Olympics for four years running. They provided a t-shirt and numbers for every student along with sending many volunteers for the day to help with the event.
We will also had "Jake the Lion," the mascot from the Worcester Bravehearts of the Futures Collegiate Baseball League (FCBL) of New England. He visited students around the field during the day.
These games are a success because of the Mini Olympic Committee of ten teachers, led by Meg Paradis and Meg McDonald. These individuals work tirelessly all year to make the event fun and exciting for all.
Because of the great success and size of the games, we had the Doherty High School Football team in attendance. These players volunteered to help the Physical Education teachers run the games smoothly.
Winning schools and student-athletes took home trophies and medals donated by the Educational Association of Worcester.
We are also lucky to have the expertise of Channel 3 Worcester and Kill the Ball Media for spreading the news of the successes of the students in the Worcester Public Schools.


text:
FRANKFURT, Germany (AP) -- It may trail the historic impact of Charles Lindbergh's 1927 solo flight across the Atlantic, but the Spirit of St. Louis also did not have a wingspan wider than a football field or space for more than 500 passengers.
For plane builder Airbus and German airline Lufthansa, the A380's first flight to North America on Monday was a chance to show off the superjumbo to potential U.S. buyers and to the airports they hope will be flight bases for the double-decker jet.
"We're talking about an airplane that is representing aviation in the 21st century in terms of efficiency," said Jens Bischoff, Lufthansa's vice president for the Americas.
For Airbus, which has been beset by management and financial crises -- including a two-year delay to the A380 that wiped more than €5 billion ($6.61 billion) off profit forecasts -- the flight was a chance to prove that the plane will be ready when the first deliveries are made in October to Singapore Airlines.
Lufthansa chief pilot Juergen Raps, who has flown the A380 before, said that despite the superjumbo's size, it was nimble and responsive.
"If I were to compare it to driving, you would think this would be like driving a truck or a bus," he said inside the plane's cockpit. "It's like driving a Ferrari."
The air show began early Monday at Frankfurt International Airport when the 240-foot-long plane took off as Lufthansa Flight 8940 for the eight-hour flight to New York's JFK Airport and landed safely shortly after noon EDT. Onboard were 483 people, including four pilots, four Airbus crew members, 23 Lufthansa cabin crew and several hundred passengers, mostly Airbus and Lufthansa employees along with some reporters.
"Everything went smoothly," said Klaus Busch, a spokesman for the Frankfurt Airport.
As a test on Sunday, organizers boarded more than 500 people onto the aircraft using two jetways with an impressive time of less than 20 minutes. A second test was held shortly after to see if the Lufthansa workers could board it faster.
After the inaugural run, Lufthansa and Airbus will operate a demonstration flight to Chicago O'Hare Airport on Tuesday, before returning to New York and then Frankfurt. The plane then heads to Hong Kong and back, before continuing its journey to Washington Dulles International Airport on March 25, with a final stop at Lufthansa's Munich hub on March 28 to complete the series of optimization flights.
Using the performance results from this circuit -- flying the plane as it would be done so if it were in service -- Lufthansa's goal is to match the A380's turnaround time from landing to takeoff with that of much smaller long-haul jets in operation.
The A380, which burns about four liters (one gallon) of gas per passenger every 130 kilometers (80 miles) and can fly some 8,000 nautical miles, can seat as many as 550 passengers. Airbus has 166 orders from 15 airlines for the new plane, which has made tests flights in Europe and to Asia.
"We are proud that ... we are now able to present the A380 to the American people," said Mario Heinen, the head of Airbus' A380 program. "Both JFK and LAX, as well as Chicago O'Hare International and Washington Dulles International Airport are key future destinations for the A380."
The Frankfurt-New York flight was one of two A380 flights to the United States. The other was an A380 operated by Australian airline Qantas that landed at Los Angeles International about 12:30 p.m. EDT Monday but carried no passengers or crew, save for those in the cockpit.
Toulouse, France-based Airbus said that plane will perform tests at the California airport, including airfield maneuvers, docking at the terminal gate and ground and gate handling exercises. The Los Angeles airport, the fifth-busiest worldwide, is expected to be the first U.S. destination for the A380 when it enters commercial service.
"The airports seeing the A380 this week and next are among the key future destinations for the A380 and following these flights, these hubs will prove themselves ready, willing and able to welcome the A380 for service," top Airbus salesman John Leahy said.
Lufthansa, which has orders for 15 A380s and an option for five more, expects to use the planes on its international routes, mainly to Asia and North America. It expects the first one to be delivered in mid-2009, pushed back from 2008 by the manufacturing delays.
The problems at Airbus led Louis Gallois, co-chief executive of parent company European Aeronautic Defense and Space Co., to call 2006 "the worst year for Airbus in its life." Airbus is seeking to recoup its losses by cutting 10,000 jobs and spinning off or closing six of its European manufacturing plants.
Copyright 2007 The Associated Press. All rights reserved.This material may not be published, broadcast, rewritten, or redistributed.


text:
Sounds like an email spam subject line, I know, but it's actually a claim made by Atari founder Nolan Bushnell.
Speaking at the Cloud Gaming Conference USA, Bushnell — who also founded Chuck. E Cheese's — said he's been working for the past decade on a computer education project that takes place in the "cloud", and that during a 40,000 student test his system is "currently teaching subjects 10 times faster".
"We believe that when we roll this up to full curriculum we'll be able to teach a full career of high school in less than a year", Bushnell said. "And we think we'll be able to do that by the end of next year."
"That's a lot of time to chase girls and have fun."
Girls? What the hell are you talking about, Bushnell. That's a lot of time to play video games.
Bushnell: Cloud computing will improve education [GI.biz]


text:
TORONTO (Reuters) - Canada wrested "significant" commitments from China's CNOCC on issues of corporate governance and transparency as part of its approval of the acquisition of a swath of Canada's valuable oil sands reserves, Industry Minister Christian Paradis said on Sunday.
Defending the $15.1 billion takeover of Nexen, one of Canada's largest independent oil companies, in the face of grumbles from the left, Paradis said that Canada won "significant undertakings" from CNOOC.
Canada announced on Friday that, after months of study, it would allow CNOOC's $15.1 billion acquisition of Nexen Inc, a controversial ruling given concerns from some in the ruling Conservative party about China's human rights record.
Paradis said CNOOC made promises involving the management of Nexen and that the Chinese company would have report back to the Industry Ministry to ensure conditions are being met.
Canada made "sure that we had significant undertakings in terms of governance, about transparency, about disclosure," Paradis told CTV's "Question Period" program.
Paradis said he could not provide details for commercial reasons.
Under the deal, CNOOC will get full control of Nexen's Long Lake oil sands project in northern Alberta, properties containing as much as six billion barrels of recoverable crude and a 7.2 percent stake in the Syncrude Canada Ltd joint-venture.
The ruling, closely watched by investors, followed months of heated debate over how much of Canada's energy sector, and especially its oil sands, should be absorbed by companies run by other governments.
Opposition leader Thomas Mulcair said the only clear winners in the deal were oil company shareholders.
"The only clear net benefit is to Nexen shareholders in Mr. Harper's oil patch," Mulcair, leader of the New Democratic Party, said in an interview on Global TV's "The West Block." "I think it has as much to do with that as anything else."
The Nexen deal is the largest successful foreign takeover ever by a Chinese company. Separately, Ottawa on Friday also gave the green light for the purchase of Progress Energy Resources Corp by Petronas of Malaysia.
Prime Minister Stephen Harper served notice, however, that future investments by state-owned enterprises would face much tighter scrutiny.
Paradis reiterated Harper's statement that it was time to "draw a line" against any further encroachment by foreign state-run enterprises in the oil sands, which are the world's third largest oil resource after those in Saudi Arabia and Venezuela.
Analysts said the Canadian government's announcement brought some clarity to the market, which could help boost the already strong Canadian dollar.
"It does show a willingness from Canada's government to encourage foreign investment which speaks to a longer-term interest into the Canadian dollar," said David Tulk, chief Canada macro strategist at TD Securities.
The Harper government said it would still welcome non-controlling minority investments by state-run enterprises in Canadian companies, while insisting that the door remains open to private-sector firms.
Two years ago Canada had rejected BHP Billiton's $39 billion bid for Potash Corp, on the grounds that it was not in Canada's net interest.
CNOOC will also acquire Nexen's 43 percent stake in the Buzzard field in the North Sea, the most important contributor to the crude blend used to set the Brent crude price that serves as the international oil price benchmark.
Nexen also has oil production from Yemen, offshore West Africa and the Gulf of Mexico.
Petronas offered C$5.2 billion ($5.3 billion) for Progress, a mid-size gas producer.
Nexen shares fell 6.3 percent to C$23.29 on the Toronto Stock Exchange on Friday, before the announcement was made. . Nexen's New York-listed shares surged in after-hours trading. Progress fell 88 Canadian cents, or 4.4 percent. to C$19.37.
($1=$0.99 Canadian)
Additional reporting by Euan Rocha and Alastair Sharp; Editing by Leslie Adler