Blog Home  Home |  Breeze Home RSS 2.0 Atom 1.0 CDF  
Mick's Breeze Blogs - Biztalk/Sharepoint/... - Wednesday, November 08, 2006
Things hard and not so hard....
 Thursday, November 09, 2006
 
finally some of the pain of the different products and their versions have gone away. :-)
Thursday, November 09, 2006 9:54:59 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   .NET Developer | WinWF  | 
 Wednesday, November 08, 2006

While delving into the depths of this for a current project - I shot a question off to the team over in Redmond in relation to the TPE and grabing related data from different areas of a BTS process.....NOW this is where it got great!!!

Vikas responded and check out his fantastic blog - dedicated to Biztalk and TPE!!!

In particulare I'm interested in Continuations

Thousand thanks Vikas + co.

Cheers,

Mick.

Wednesday, November 08, 2006 10:41:26 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Tips  | 
 Tuesday, November 07, 2006

Hi guys,

I'm currently researching ways to do this outside of an orchestration - e.g. pipeline.

Here's a simple technique you can use INSIDE an Orch.

(1) variable declarations in the Orch.
System.Type MapToApplyType;

(2) message declaration
<schema type or whatever>   msgIn;
System.Xml.XmlDocument    msgOut;

(3) code in the Orchestration  - in the getType function you could grab that string from rules or anywhere.
In an expression shape: (for eg)
MapToApply = System.Type.GetType("MyMapAssembly.MyMap, MyMapAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abfe123ef93cc2aa");

(4) in a message construct shape for msgOut
// the line below is GOLD where
transform (msgOut) = MapToApplyType(msgIn);


There you have it!!! BTS looks after the finding and loading of the map. transform is an internal keyword of bts.

Have fun,




Tuesday, November 07, 2006 10:07:06 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Tips  | 
 Friday, November 03, 2006

 I recently came across yet another great BizTalk tool - this tool gives you a view of the Tracking database with a twist

You can follow a message through BizTalk and see how long each stage took - Orchestration or other. Pretty cool just to be able to see timings and paths right infront of you.

This tool was initially developed by Unisys for their performance testing of BizTalk - well done all!

 

Link to BizTalk Time Breakdown - Boudewijn's adapter blog

Friday, November 03, 2006 1:13:34 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Tips  | 

As you may have experienced usually from a Send Port within an Orchestration, the Orchestrations says "Yep all sent" (via the message box to the subscribed Send Port........

....then the unspeakable happens.....the Send Port Fails! but the Orchestration has long gone and said all is good.

By setting the Notification Property to Transmitted to the Send Port within the Orchestration, causes the Orchestration to wait till a Success or Failure has come back from the Send Port.

To view the Acks or NACKS (for e.g. you may ask - how many times does this fail??)

Simply add a Filter property to a Send Port of BTS.AckType=NACK or ACK

You're done - you can now see an internal message within BizTalk

Thursday, November 02, 2006 11:06:17 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]    | 
 Thursday, November 02, 2006

I came across a great simple sample of how to do this and thought I show how easy it is to do this.

A whole bunch of BizTalk Samples from the Developer Team is here:
BizTalk Samples

One of the samples on the page is the ConsoleAdapter - very simple, non Adapter framework receive adapter. This is an isolated adapter.

Here's the crux of the sample - In particular look at the ProcessMessage function.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.BizTalk.Interop;
using Microsoft.BizTalk.Messaging.Interop;
using Microsoft.BizTalk.TransportProxy.Interop;
using Microsoft.BizTalk.Adapter.Framework;
using System.Globalization;
using System.Resources;
using Microsoft.BizTalk.Message.Interop;
using System.IO;

namespace Microsoft.Samples.BizTalk.Adapters.ConsoleAdapterLibrary
{
public class ConsoleAdapter : IBTTransport, IBTTransportConfig, IBTBatchCallBack
{
~ConsoleAdapter()
{
// Class destructor called by default right before ConsoleAdapter class is being
// destroyed. This method makes required call to TermiateIsolatedReceiver to
// match previous calls to RegisterIsolatedReceiver in the Register method.
_tp.TerminateIsolatedReceiver();
}

static ConsoleAdapter()
{
// Default class constructor called by default as ConsoleAdapter class is being
// instantiated. This method accepts a string as input from the command line and
// calls the SendMesage helper method to submit it to BizTalk Server.
// Multiple messages can be submitted by entering numerous strings and hitting <ENTER>.
// To end the progam hit <CTRL-C> and it will exit.
Console.WriteLine("Type in message text and hit <ENTER> for each BizTalk Server message. Hit <CTRL-C> to exit.");
string data = Console.ReadLine();

do
{
// Submit the msssage to BizTalk Server
SendMessage(data);
data = ""
data = Console.ReadLine();
}
while(true);
}
static void SendMessage(string data)
{
// Helper method called by the default class constructor immediately following the
// ConsoleAdapter class being instantiated. This method accepts a string as input.
// That string is used as part (the body) of the message which is submitted in a
// (single) message batch to the BizTalk Server Messaging Engine. This method is
// called once for each message to be submitted.

// If the adapter instance is registered with BizTalk then proceed. Otherwise this
// is the first message being submitted so register the adapter instance as an
// isolated recevier with BizTalk Server.
if (!Registered)
Register();

// Create a message part containing the string and adds it to the message
IBaseMessagePart part = _fact.CreateMessagePart();
IBaseMessage msg = _fact.CreateMessage();
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
sw.Write(data);
sw.Flush();
ms.Seek(0, SeekOrigin.Begin);
part.Data = ms;
msg.AddPart(MESSAGE_BODY, part, true);

// Create a new context for a message.
SystemMessageContext context = new SystemMessageContext(msg.Context);

// _url is consoleadaptertestharness.exe
context.InboundTransportLocation = _url;
context.InboundTransportType = "Console"

// Obtain a batch from the Messaging Engine proxy and submit the message via the batch.
IBTTransportBatch batch = _tp.GetBatch(_cb, _cb);
batch.SubmitMessage(msg);
batch.Done(null);

}
void ProcessMessage(Stream s)
{
//This gets us the interface to the Messaging Engine
IBTTransportProxy tp = GetProxy();
//get the message factory
IBaseMessageFactory msgfact;
msgfact = tp.GetMessageFactory();
IBaseMessage msg;
//create the message object
msg = msgfact.CreateMessage();
IBaseMessagePart part;
//create the part - in this case
//the only part
part = msgfact.CreateMessagePart();
//give the part the stream
part.Data = s;
//add the part
msg.AddPart("body", part, true);
IBTTransportBatch batch;
//get the bacth - the object
//used to send messages
batch = tp.GetBatch(this, null);
//submit the message - in this case
//this is a one-way MEP
batch.SubmitMessage(msg);
//tell the batch we're done
batch.Done(null);

}
IBTTransportProxy GetProxy()
{
// Helper function to return a pointer to the proxy.
return _tp;
}
static void Register()
{
// Get the transport proxy and use it to register the adapter and it's receive location
// with BizTalk Server.
_tp = new BTTransportProxy() as IBTTransportProxy;
_tp.RegisterIsolatedReceiver(_url, _instance);
_fact = _tp.GetMessageFactory();
Registered = true;

}
private static CB _cb = new CB();
private static string MESSAGE_BODY = "body"
//Need to have a receive location by this same name "ConsoleAdapterTestHarness.exe"
static string _url = "ConsoleAdapterTestHarness.exe"//System.Diagnostics.Process.GetCurrentProcess().ProcessName;
static IBaseMessageFactory _fact = null;
static ConsoleAdapter _instance = new ConsoleAdapter();
static IBTTransportProxy _tp = null;
static bool Registered = false;
public Guid ClassID { get { return new Guid("{82A2D6BC-F1CA-4ad5-80AA-ED7B7A52B493}"); } }
public string Description { get { return "Description" } }
public string Name { get { return "Console Adapter" } }
public string TransportType { get { return "Console" } }
public string Version { get { return "1.0.0.0" } }

void IBTTransportConfig.AddReceiveEndpoint(string url, Microsoft.BizTalk.Component.Interop.IPropertyBag adapterConfig, Microsoft.BizTalk.Component.Interop.IPropertyBag bizTalkConfig)
{

}

void IBTTransportConfig.RemoveReceiveEndpoint(string url)
{

}

void IBTTransportConfig.UpdateEndpointConfig(string url, Microsoft.BizTalk.Component.Interop.IPropertyBag adapterConfig, Microsoft.BizTalk.Component.Interop.IPropertyBag bizTalkConfig)
{

}
public void BatchComplete(int status, short opCount, BTBatchOperationStatus[] operationStatus, object callbackCookie)
{

}
}
public class CB : IBTBatchCallBack
{
#region IBTBatchCallBack Members

public void BatchComplete(int status, short opCount, BTBatchOperationStatus[] operationStatus, object callbackCookie)
{

}

#endregion
}
public class ConsoleAdapterConfig : IAdapterConfig
{
#region IAdapterConfig Members

public string GetConfigSchema(Microsoft.BizTalk.Adapter.Framework.ConfigType configType)
{
switch (configType)
{
case ConfigType.ReceiveHandler:
return GetResource("ReceiveHandler");

case ConfigType.ReceiveLocation:
return GetResource("ReceiveLocation");

default:
return null;
}
}
string GetResource(string name)
{
ResourceManager rm = ConsoleAdapterLibrary.ConsoleAdapterRes.ResourceManager;
return rm.GetString(name);

}
public Microsoft.BizTalk.Adapter.Framework.Result GetSchema(string uri, string namespaceName, out string fileLocation)
{
// TODO: Add RemotingAdapterConfig.GetSchema implementation
fileLocation = String.Empty;
return Result.Continue;
}

#endregion
}

}

Thursday, November 02, 2006 9:39:21 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | RFID  | 

Something to share with you - ever wanted to clear out the tracking database? two ways to do this:

1. considerate way - only purges completed items
MSDN BTS06 Proper Purge

2. inconsiderate way - FAST! purges ALL data in the DTA.
Stored Proc - dtasp_CleanHMData (useful in test environments etc)
This will truncate the tables within the DTA DB - just like new!

Cheers,

Mick.

Thursday, November 02, 2006 8:08:59 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Tips  | 
 Tuesday, October 24, 2006

You dont need to wait for BTS2006 R2 to make this happen.

Basically there are several ways to approach this and one of the main exceptions is that the corresponding BTS WSS Webservice fails when it finds the 'new' version of Sharepoint on the box. (the Sharepoint apis etc. do maintain backward compatibility for existing code)

One technique is to install Sharepoint V2, SP2 it, install BTS2006 and make sure the WSS adapter is working. Then upgrade Sharepoint......fingers crossed.

the other simpler technique is to re-bind the BTS2006 WSS Webservice to work with the new Sharepoint V12.0.0.0 version.

A new member of the BizTalk team Adrian Hamza - elaborates further here

Tuesday, October 24, 2006 8:11:36 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [1]    | 

We have put together a very comprehensive in-depth course on the Microsoft Sharepoint 2007 platform.

We've had some great scores and feedback from the 80 students trained up so far....check out some further details....

Breeze Trainings Microsoft Office and Sharepoint 2007 Deep Dive

The best thing we come to you!

Tuesday, October 24, 2006 7:35:58 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   Office | Training  | 
 Sunday, October 22, 2006

Hi folks - as you all know it's about Connected Systems - not neccessarily about one technology on it's own.

I'm a firm believer that we're always trying to solve a customer's problem/solution which will involve more than just BizTalk.

In our 'BizTalk' space now (with R2 TAP on the way), we have technologies such as:

  1. BizTalk 2006
  2. RFID
  3. WCF
  4. WinWF
  5. SSB
  6. SSIS
  7. All the LOB adapters from BizTalk 2006
  8. MOSS 2007
  9. MSMQ/MQSeries etc.

So as an 'integration specialist' we need to know not only how these work and the benefits of each for certain environments, but also how to create an effective solution in these technologies. (not something like - "I believe you can do that in .....I just need to watch some webcasts on it first" :)

The Sydney BizTalk User Group has launched a Connected Systems Mailing list.

How to JOIN:
1. send an email to stserv@list.sydbiz.org with
SUBSCRIBE cs@list.sydbiz.org  
in the BODY of the message (you can put anything for the SUBJECT, or leave it blank)

So come and join my one other friend to kick this off. :)

How to UNJOIN:
1. send an email to stserv@list.sydbiz.org with
UNSUBSCRIBE cs@list.sydbiz.org

 


Sunday, October 22, 2006 3:03:28 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   .NET Developer | BizTalk | RFID | Events | Office | Tips | WinWF  | 

Here's details of our next meeting - love to see you there (http://sydbiz.org)

This Month – “MOM’s the Word with BizTalk 2006”

Thursday, 26th October 2006
6:00 PM
DDLS, Level 10
Thakral House
301 George Street, Sydney (back in the City Folks)

This month we are in for a treat as Chris Vidotto (Microsoft Australia’s leading BizTalk Technical Specialist!) is in town for Thursday night – hence the night change this month.

I also have a couple of other things to tell you guys also. So let’s get cracking –

1. Presentation Details

We are going to have a look at Monitoring your BizTalk solutions through MOM.

Come and join us to understand how you can monitor your BizTalk Environment using MOM

    • Chris Vidotto (National Microsoft Australia BizTalk TS) will be presenting on:
      MOM Agenda:
      • I’ll guide you through installing MOM and the BizTalk Management Pack
      • Explain how you can utilise the rules to monitor specific BizTalk events.
      • I’ll demonstrate several capabilities through the MOM Operator and Administration Consoles.

        Questions - Bring these along too.

2. What’s News this month
A lot has been happening this month (why does this feel like a MSDN/Technet email J) and to fill in:

a. Connected Systems push from Microsoft Redmond. BizTalk, RFID, .NET 3.0 components of WCF and WinWF all fall into the ‘Connected Systems’ space. (even our user group may be umbrella-ed by some Australia + NZ wide central body – more on that if/when it happens).

So in seeking to provide you guys with a better service (from your trusty user group leader) I’ve set up a ‘Connected Systems mailing list’. Focused on Biztalk (as if it wouldn’t be!), WCF, WinWF and RFID. We want to focus on integration

So come along and join me (and my one other friend on the list) – answers to problems etc.

Just to note: we do value your privacy as well and list membership details will NOT be given out to anyone.

List details – cs@list.sydbiz.org
To Join:

send a mail to ‘stserv@list.sydbiz.org’ with the line in the BODY of the message
‘SUBSCRIBE cs@list.sydbiz.org’
or click on this link JOIN
To Leave – say ‘UNSUBSCRIBE cs@list.sydbiz.org’

b. BTS 2006 R2 TAP is under way – hope you’re on it and having fun. Lot’s of new things (always) on the horizon with BTS 2006 R2

<!--[if !supportLists]-->c. RFID kit – I should be in possession of the kit any day now, expect to be running around with the latest and greatest membership recording system BizTalk can bring to the table. RFID is the name.......you guys will be just so far ahead of the game.

Here's a rundown with approximate presentation times:

6:00 PM Meet & Greet (free pizza & drinks!)

6:30 PM Monitor your BizTalk environment using MOM.

7.30 PM Questions and up and coming agenda revealed

7.45 PM Nearest pub.....

Looking forward to seeing you all!
Mick Badran/Mark Burch
Coordinator
mb: 0404 842 833

Sunday, October 22, 2006 2:52:29 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Events  | 

Once again Andrew Leckie has sent through another gem - a performance document comparing BTS04/SQL2000, BTS06/SQL2000 and BTS06/SQL2005. The tests were carried out by 'InfoSys' in the US - well done guys.

Some very interesting results

Grab the document here -

biztalk-2006-performance-benchmarking-Report.pdf (674.5 KB)

Good stuff.
Sunday, October 22, 2006 11:08:25 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Tips  | 
 Tuesday, October 17, 2006

The product team has been busy...one for all your EDI questions

Find it here:
http://blogs.msdn.com/BizTalkB2B/

Tuesday, October 17, 2006 7:41:46 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk  | 
 Friday, October 13, 2006

Very handy to have about keeping IIS6 streamlined, and outgoing socket connections adjustable.
So when BTS is busy crunching away and creating sockets to various endpoints.

On a current project, we use a 'helper' class to talk to an ERP system (pronto) and the helper class creates (& destroys upon cleanup) a socket with each instaniation.

Problem is that Windows will not immediately return the discarded socket back to the socket pool for up to 2 mins (due to slow networks etc. and the TCP setup needs to be fully 'flushed' as I understand)

The issue is - in busy times within the registry there is a value that says - the user (aka BTS) can only create 5000 socket connections at any one time. 1024 are already taken in the well known port space (esp. on a server) so we found we were hovering around the 3900 active connections at once...till things went bad.

These settings below - one for IIS accepting/servicing a higher number of socket connections and the other is for outgoing user connections.

It's always interesting moving these bottlenecks along....to see what the next component that presents itself as the bottleneck.

Enjoy.

MaxConnections (HTTP.SYS)

Controls the number of simultaneous HTTP connections (and hence limits number of simultaneous connections serviceable by IIS6).

  • On Windows Server 2003 RTM x86, this comes out to around 8,700
  • On Windows Server 2003 SP1, the limit has been removed
  • On Windows Server 2003 SP1 x64, since NPP is bound by available memory, you can increase concurrent connections by merely adding more RAM.

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
    Type: DWORD
    Value: Range from 0 to 2^32-1

MaxUserPort (TCPIP.SYS)

Controls the max port number that TCP can assign. Every unique client making a request to your web server will use up at least one of these ports on the server. Web applications on the server making outbound SQL or SMB connections also use up these ports on the server... so it highly affects the number of concurrent connections.

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Type: DWORD
Value: Range from 5000 to 65536
Friday, October 13, 2006 12:31:02 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Tips  | 
 Saturday, October 07, 2006

If you've got CRM 3.0 here the Microsoft's BizTalk 2006 Adapter for you.
There have been whispers about this for a while.....wait no longer clock

Grab it here - http://www.microsoft.com/downloads/details.aspx?familyid=4628FCA6-388D-45BC-A154-453B920DBCB8&mg_id=10044&displaylang=en

Saturday, October 07, 2006 9:09:35 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [5]    | 
 Friday, October 06, 2006

Just got an email from Andrew (great all round good guy) about a cool Adapter example he came across.....very nice.

Enabling Faxing of messages from BTS using the Win2K3 FaxServices API and the Office2003 Document Imaging Library.

Enough said - BizTalk Fax Adapter Project

Nice work!

------------- snippet from the Project Page --------------
What the BTS Fax Adapter Does

When the FaxMessage Arrives to the Incomming Archive. The Fax Adapter Copies the Tiff Image (FaxMessage) to the temporary folder and runs OCR on the Tiff Image and Extracts the Text and submits to BizTalk as a message, or takes messages from BizTalk Server and Sends to the FaxConsole. It provides code to build either a dynamic or a static adapter; however, the following procedure only outlines the static adapter. A static adapter is an adapter with a static set of schemas and no custom user interface. A dynamic adapter has a custom user interface and potentially a dynamic set of schemas. Both static and dynamic adapters use the Add Adapter Wizard to add their schemas to a BizTalk project


Friday, October 06, 2006 12:04:00 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   .NET Developer | BizTalk  | 
Copyright © 2009 Breeze Training. All rights reserved.