Where’s my functoids?

QuickLearn is in the process of updating our now famous BizTalk Deep Dive course (NEW and IMPROVED!). As I have been collecting and reviewing content for the advanced mapping module, I am reminded of one of the most common "Eureka" moments for many students is the realization of just how easy it is to create custom maps without using functoids. Many people come to BizTalk after having developed a custom integration project that required them to create their own XSLT. Often I am asked, "Can’t I leverage the work that I've already done and use the XSLT I’ve created? Do I have to use all those functoids?” The answer: Of course you can use your own XSLT, and some of the best maps do! You really have three options here: The first two involve the use of Scripting functoids; the third relies strictly on the XSL that you provide.

Inline XSLT

Many times, the result of chaining several functoids together can be more concisely defined in a little custom XSL. When using the inline XSLT option, the Scripting functoid cannot have any input links; rather, it should contain references to the source schema nodes through XPath expressions. The functoid must link directly to a record or field in the destination schema (it cannot be input for other functoids).

Inline XSLT Call Templates

Like an inline XSLT script, the inline XSLT call template must connect directly to a destination node; however, it may receive input through links coming from other functoids, or from the source schema. On the map grid, setting the Custom Extension XML property enables Scripting functoids, configured as either Inline XSLT or Inline XSLT Call Templates, to make calls to external assemblies.

Custom XSLT Code (Look ma, no functoids!)

If you have XSLT code you have written to convert instance messages, you can use that code directly, instead of creating a map.

  1. Create an empty map and set the source and destination schemas as you normally would.
  2. With the map grid selected, configure the Custom XSLT Path property to use the file containing your custom XSL.

 

NOTE – Using custom XSL overrides all links and/or functoids in the map.

Remember that you can always validate your map to access the generated XSL, which will be executed for the map. Also remember that maps do not validate the messages generated, except while testing in Visual Studio. The warnings you receive in Visual Studio provide design-time assistance to identify possible problems. BizTalk is totally content with generating exactly the message that you tell it to, valid or not!

Until next time, have a great day.

SharePoint ADAM Role Provider plus ASP.NET Provider Client Application

SharePoint ADAM Role Provider plus ASP.NET Provider Client Application

I am working on some customisations of SharePoint authentication at the moment.  These articles give some useful examples.


SharePoint ADAM Role Provider


http://www.sharepointsecurity.com/content-183.html


ASP.NET Provider Client Application:


http://www.sharepointsecurity.com/content-185.html


More about ADAM:


http://technet2.microsoft.com/Office/en-us/library/678d6c9e-12cb-44fb-8936-7a3a67f53d3e1033.mspx?mfr=true

Microsoft Partner Readiness Events – Windows Server 2008 …..do those folks ever sleep?? :)

To give you guys an idea of what’s happening around Australia on some of the Partner
Readiness events – lock this one in.

The Readiness Team is covering both IT Pro & Developer tracks…..maybe
a bit of Powershell, VS.NET 2008….

>

1.            Upcoming Partner
Readiness
training on Windows Server 2008 

Windows
Server 2008 : IT Pro 

 

 

 

Sydney

Sept
11 – 12

This
2 day Windows Server 2008 Essentials is intended for IT professionals and partners
currently experienced on the technologies included in Windows Server 2000 and Windows
Server 2003. The course will focus on and discuss the following product scenarios
and technologies: Centralized Application Access, Branch Office, Security & Policy
Enforcement and Server Management. 

CLICK
HERE FOR MORE

 

Melbourne

Sept
13 & 14

 

Perth

Sept
10 & 11

 

Adelaide

Sept
18 & 19

 

Brisbane

Sept
17 & 18

Windows
Server 2008 : Developer

 

 

 

 

Sydney

Sept
10 & 11

This
two-day technical readiness event is designed to introduce developers to many of the
new features of Windows Server 2008.  As Microsoft prepares to release the most
advanced version of their server platform ever, now is the time to start learning
how to use many of the great enhancements in the applications you write and deploy.
Learn how Windows Server 2008 provides a compelling application foundation and makes
huge leaps forward in the area of Microsoft’s DSI (Distributed Systems Initiative)
and DFO (Design for Operations).
CLICK
HERE FOR MORE

 

Melbourne

Sept
13 & 14th

 

Brisbane

Oct
8 & 9

 

 

 

 

2.        Exciting
Partner Readiness Special offers – take advantage of the special offers and ensure
your place at the Microsoft Readiness events.

[email protected]

As the Dust Settles

As the Dust Settles on Tech.Ed I find myself frantically preparing sessions for Web On The Piste.


It was great catching up with Natasha (of Trade Me and Webstock fame) at Tech.Ed last week but like Natasha after doing this for a few years now I’m starting to realise that when it is event season your job is never done!


I had a few questions about the Silverlight video we pushed onto the http://techedlive.co.nz site during the conference. Yes all the videos are hosted on Silverlight Streaming using the free account so yes you can do the same thing on your sites!


This year I had been given the job as official video guy and after the hours spent capturing, editing and uploading to silverlight streaming I’m never going to put my hand up to do that job again. It took me out of the conference for much more time than I was happy with. The most frustrating part of all of this was dealing with the Mac centric firm that had been sub contracted to capture the keynote video. They came back to us no less that 5 times during the two days after the keynote with completely unusable formats (I can work with MOV, MPEG, AVI etc but not with what they produced!). In the end they came into Tech.Ed with a version of the latest quicktime installer from apple to prove that their MOV file did play on Windows. When it failed to work they tried to blame Vista only to find that it also didn’t work on Windows XP. Note to others wanting to do business with Microsoft in the future BUY A PC and test it or at least run boot camp on your Mac!


On the plus side although I didn’t present myself at Tech.Ed on Thursday I presented 3 sessions at Tech.Ed Student day in sky city theatre to 600+ students. I loved the sessions and presenting along side the famous Steve Riley I think they were well received.


I have received a few questions about how we created the keynote Picture in Picture player that streams the two keynote feeds simultaneously. I realised after watching the video on this player that there are a few sync issues if the streams need to buffer so it appears that there is still a bit of work required to address the sync’ing issues.


I grabbed the base code for this from Michael Scherotter opened it in the August preview of Blend 2 and pimped it a little for the event (my source code here).


The interesting thing about this piece is that it combines two Windows Media Streams that are hosted on the Microsoft site.


mms://wm.microsoft.com/ms/nz/teched07/keynote_deck.wmv
mms://wm.microsoft.com/ms/nz/teched07/keynote_speaker.wmv

Because these streams are external resources you can “repackage” them using other player designs. Here is another Silverlight player skin that I uploaded to Silverlight Streaming that points to the keynote_speaker.wmv stream and contains chapters to different parts of the keynote presentation.

To embed this video I have put the following HTML below

<iFrame src=”http://silverlight.services.live.com/invoke/33/teKeynote/iframe.html” mce_src=”http://silverlight.services.live.com/invoke/33/teKeynote/iframe.html” frameborder=”0″ width=”432″ height=”324″ scrolling=”no”></iFrame>


Click here to view!


The one surprise for me over the event was the quality of the Canon HV20 consumer camcorder, check out this video from TechFest that I shot and uploaded to Silverlight Streaming, the codex going from true HD to streaming produced a video that is smaller than 10MB and the quality IMO is still fantastic!

Using WCF WebHttpBinding and WebGet with nicer Urls

Using WCF WebHttpBinding and WebGet with nicer Urls

I’ve been playing with the REST support
in .NET 3.5.  I’m really enjoying the programming model, but I am not enjoying
the .svc file extension in my URLs (I’m not the only
person
I know who has felt this way for quite some time).

IMO (from what little I know about the REST style) URLs shouldn’t have things like
extensions in them (or preferably not).  So with they way WCF endpoint hosting
in IIS works (obviously if I am hosting a webHttpBinding in a non-IIS host I can totally
control the URLs, but I am writing a REST API to something where I plan to be hosting
inside of IIS).  This would end up being my url:

http://host/albumn.svc/instance/

and I want:

http://host/albumn/instance/

The .svc extension in the URL doesn’t seem opaque to me.  I tried modifying the
HttpHandler element for the svc file – but that didn’t work for various reasons. 
So I ended up writing a simple HttpModule to do URL re-writing (using HttpContext.RewritePath). 
I didn’t really want any config relating to URLs – so this module assumes you
are serving up only REST based URLs from a web application.  If you were going
to use it and serve up other handlers (like aspx files etc) it would need to
be modified. Here is the module code:

public class RestModule
: IHttpModule
{

public void Dispose()
{ }

public void Init(HttpApplication
app)
{
app.BeginRequest += delegate

{
HttpContext ctx = HttpContext.Current;
string path = ctx.Request.AppRelativeCurrentExecutionFilePath;

int i = path.IndexOf(‘/‘,
2);
if(i>0)
{
string svc = path.Substring(0,
i) + “.svc”;
string rest = path.Substring(i,
path.Length i);
ctx.RewritePath(svc, rest, ctx.Request.QueryString.ToString(), false);
}
};

}

}

After configuring this in my web.config – I have the ability to type:

http://localhost/RestTest/Service2/Test?id=9999

and the module will translate it to Service2.svc as the handler file – which makes
WCF happy.

If you are interested you can download the code here:

RestTest.zip
(3.71 KB)


Check out my BizTalk
R2 Training.

My blog, the reasons, the results

I recently received an email from an anonymous blog reader asking why the recent posts about the minor discrepancies in the BizTalk product and how it would help them with resolving issues.

This isa perfect intro into the reason why I maintain a few blogs.

  1. These are my personal blogs, I don’t get any $ from MS for providing this information (however my wife thinks I should), so it is a lot of my rants.
  2. A reminder of the mistakes I have made, as before I had this blog, I would make the same mistakes over and over, and I finally realized that I needed to keep a record of all of my mistakes and how I fixed them so I wouldn’t need to re invent the wheel (so now you know that I am very proficient at making mistakes (the cat is out of the bag)!)
  3. Hopefully assist others from having to be as frustrated with the things that I have come across.
  4. Have a venue to present to a larger audience things I think could be improved so that the MS products in the dot releases or major releases are better, making my life easier (which is what I am all about (laziness)). By having a larger audience, MS listens to the masses a lot more than they do a single guy screaming of its deficiencies.

Since there are some of you that actually care about what I blog about, THANK YOU.

Could I ask a favor of you all who are my blog readers?

Could you tell me what you would like me to blog about, be it BizTalk issues, rants about the product, what you spend your time on, how you think the product (I don’t care which product) could be better, or the documentation better, or even my blog style.

I want thank Eric Battalio for suggesting that for my entries should be a little more ‘buildup’ to the answer, explaining how someone could get into situations where I provide the answer on how to resolve it. I am trying to give a little more background on the issues, instead of just the answer with no context.

Hope to hear from you