Matt Hall BizTalk - RSS Feed URL - Blog rss feeds
Home | Most popular rss | Newest feed urls | Popular search | Tags | Submit RSS URL
RSS Feed Categories
.NET
Advertising & Marketing
Africa
Americas
Art & writing
Articles & tutorials
Asia
Australia
Automobile
C/C++
CA
Cisco
Computers
Construction
Developer News
Europe
Finance
Foods & Beverages
Fun & Entertainment
Games
General
Hardware & PDA
Health
Human resources
IBM
Internet
Java
Legal
Locals
Media
Microsoft
Moreover
News & Opportunities
News4Sites
NewsIsFree
Real Estate
Science & Education
Security
Shopping
Society
Software
Sports
SQL & databases
Sun
Telecom & Wireless
Thoughts & comments
Travel
UK
US
Web development
World
 
Recommended Sites
free ringtones sites
yalta
Free Ringtones
free ringtones
free ringtones
ringtones
ringtones
Free Ringtones
Free Ringtones
Free Music Lyrics
Sara Evans
free ringtones
free ringtones
info sites
Map quest
Map quest
fox news
celebrity oops
news
Used Cars
Pet Adoption
drink recipes
free articles
Apartments
online flowers
game cheats for ps2
pharmacy sites
Online Pharmacy
online pharmacy
online pharmacy

finance sites

Consolidate Debt Loans
Student Loans
mortgage calculator
Student Loans
Student Loans
Student Loans
consolidate debt loans
Student Loans
car loans
unsecured personal loans
nationwide home mortgage loan company
pay day loans
unsecured personal loans

Sponsors Sites!


Matt Hall BizTalk
RSS Feed URL : http://blogs.conchango.com/matthall/rss.aspx
Category : .NET
Total Views : 27
Latest entries from this feed url
WCF - Failed to execute request because the App-Domain could not be created

This is really a note to self, as I have a habit of forgetting the numerous issues I have overcome and feel my blog can be a great repository for such information, as it may also assist someone else out there. I haven't been as rigorous with this as I should have recently. Well, for a long time actually!

Anyway, quite a simple one really, but one I have managed to forget. If you are setting up a new WCF web service hosted within IIS you may receive errors such as that below:

Event Type: Error
Event Source: ASP.NET 2.0.50727.0
Event Category: None
Event ID: 1088
Description:
Failed to execute request because the App-Domain could not be created. Error: 0x80070005 Access is denied.

Event Type: Warning
Event Source: ASP.NET 2.0.50727.0
Event Category: None
Event ID: 1073
Description:
Failed to initialize the AppDomain:/LM/W3SVC/1/Root/<your app domain>

Exception: System.IO.FileLoadException
Message: Could not load file or assembly 'System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. Access is denied.
StackTrace:    at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
   at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(String assemblyName, String typeName)
   at System.AppDomain.CreateInstance(String assemblyName, String typeName)
   at System.AppDomain.CreateInstance(String assemblyName, String typeName)
   at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)
   at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters

I am sure there are other reasons for receiving these errors, but the times I have come across it have been due to the account defined withint the associated application pool not having read permission to the application's web.config file.


BizTalk - Configuration Management

A large percentage of issues in the numerous BizTalk 2004 environments I have encountered with at my current client have been related to configuration. The current build of the environments are conducted in a semi automated fashion; the initial build is performed by Altiris and then there are a number of steps carried out either manually or through automation scripts thereafter.

This is obviously far from ideal, as any manual configuration is prone to errors. The favoured solution would be to script the build of the entire environment and then provide a simple button for some operational employee to click that would go off and build the whole thing for you.

There are products out there that can achieve this for you, an example being Microsoft’s APF (Automated Purposing Framework) that they apparently use to do just that internally. However, your client may not be in a position to implement an external product to conduct any automation of builds for various reasons, so you would be stuck in a similar predicament whereby the build is a mishmash of manual and automated steps.

To complicate matters further, the environment at my current client is built to be a shared service. A standard integration platform based on BizTalk 2004 is deployed in the numerous environments (dev, system test, pre-production and production) and then applications are installed on top of this platform. The complexity here is that each of those applications may also have some environment configuration requirements and in one particular case we have a large, business critical application that makes numerous changes to this generic platform.

That is enough of the background information. The point to this narrative is that managing configuration of integration platform environments can be quite complex. Tools to consider when attempting mitigating the risks involved include automated build tools as mentioned above, but also configuration management tools such as the product that I have been pushed to evaluate for this purpose at my current client – Microsoft DCM (Desired Configuration Monitoring).

Now I will hold my hands up here. Until recently Configuration Management had been a concept for others to contend with. In my professional career I have been primarily involved with development until getting involved with BizTalk since the 2004 version. Therefore my exposure to technologies such as SMS (Systems Management Server), MOM (Microsoft Operations Manager) and the like had also been limited. During the last few years I have found MOM to be a very useful solution and due to necessity I am now finding SMS and DCM to also be equally useful when attempting to solve the numerous challenges involved when managing an Integration Services platform.

My initial focus has been on evaluating DCM and was the main reason for this post. This evaluation has simply entailed investigating the potential use by focusing on the manifests used by the DCM tool to report upon a server’s configuration. In case you have not come across DCM before, manifests are simply XML files that define a number of rules according to the DCM schema that are then used by the tool to report on any differences found on a specified server.

So for example, you may wish to create a rule that ascertains whether the HTTP Batch size on your BizTalk 2004 HTTP Send Host server is set to 1. Perhaps this setting is essential for the applications hosted on that environment to function as expected. In this case you would use the freely supplied Authoring Tool to enter the configuration rule, save the manifest and then execute DCM, passing in this manifest to use. As a quick note, for our investigation we are conducting this manually through the executable directly rather than utilising SMS where the functionality can be automated.

Anyway, I have been using this tool for a number of days and have to say in some frustration. I understand that this whole solution is freely available from Microsoft so you should not expect too much, but the whole authoring process seems unnecessarily complex and convoluted. The XML schema in particular seems to be illogical and the authoring tool hampers progress as much as aids it. This may lead the cynic in some people to think this was done on purpose so that Microsoft could sell their consulting services to produce ready built manifests and/or assist in the creation of those that are not already available.

However, once you have defined your manifest(s) the tool is certainly a useful addition to your armoury when dealing with the issues described earlier. Due to the amount of configuration applied to our environments I was never entirely convinced that they had been configured as per the instructions. Even the automated steps could potentially have incorrect parameters passed to them due to process. So being able to use DCM to check the most obvious configurations were applied correctly certainly assisted in providing a higher level of confidence.

So for me, this freely available utility has given me an immediate benefit even when a reasonable amount of investment time up front when authoring the manifests has to be factored in. This has been gained simply by executing the tool manually, the next step will be to look at the automation of this through SMS and the generation of reports based upon the results.

However, we may not be taking this particular route just yet. We may decide to stay with the simple manual execution for the meantime and look at establishing Microsoft Systems Center at the client, which introduces Microsoft System Center Configuration Manager 2007 – the successor to DCM. I have had a relatively brief presentation of this product by Microsoft and have to say I was quite impressed. It seems to encapsulate MOM, SMS and DCM within a more integrated solution while providing much needed enhancements to those individual products.

If you have any vested interest in making sure your environments are managed affectively and have any investments in those products, if you have not already spent some time investigating Microsoft System Center I would strongly suggest you do.


BizTalk 2004: ENTSSO Error 0xC0002A18

Firstly, I knew it had been a long time since I posted on my blog, as I have been snowed under with work for my current client and none of this work warranted any posts on the subject. However, I must admit I didn’t realise how long ago it was since I actually posted. Doesn’t time fly huh? I can’t say I know where this year has gone, but we all say that every year don’t we?

Anyway, I solved a relatively simple (but annoying) problem today that I hadn’t encountered before that didn’t have much information available on the internet; well, not for my particular scenario. So I thought it would be worth popping on my blog, firstly as a simple wave to say I am still alive and secondly as a reference for me in the future. You know how it is, you spend time solving problems then encounter them a few months later only to forget how you solved it. Well, I feel the blog is a good repository for this kind of information.

So, what was the issue? Well, one of our testing environments had taken a bit of a pounding recently with various non-functional tests. This is never healthy if you wish to come out at the end with the exact same environment as you started without some form of rebuild be it automated or not. While trying to deploy a custom adapter to this environment numerous errors were occurring, which led to the conclusion that there was in issue with SSO. A highly likely conclusion considering one of the non-functional tests included the restoration and movement of SSO.

During the investigation it was observed that whenever you tried to register a new adapter you would receive the following error:

SSO AUDIT
 Function: CreateApplication
 Tracking ID: e902339c-b431-40e5-a880-337bb873725b
 Client Computer: <Computer Name> (wmiprvse.exe:1232)
 Client User: <User Name>
 Application Name: {11C54F41-4C5A-4929-B828-7CD6E550BEB8}
 Error Code: 0xC0002A18, The format of the account name is not valid. Domain accounts must include the domain name. Local accounts must not include a domain or computer name.

This naturally led to an examination of all things related to SSO, in particular the SSO services. You would have thought from the error message that the service account used for SSO was incorrect. However, after too much time it transpired that the default BizTalk Host was registered using an incorrect domain group; it actually wasn’t in the domain as per the above error.

And the conclusion to this little story? Spend a little more time studying the GUIDs in the error. Only in hindsight did I think about searching out the details to find they would have guided me to the answer more quickly.


BizTalk 2004 – Visual Studio 2003 Preinstall Failure

I have had to park my work on BizTalk 2006 while I assist another team at my current client on some BizTalk 2004 work. I was helping to install and configure some BizTalk groups and remembered just how much of a pain this can be and how much this has evolved in BizTalk 2006.

Anyway, I had an issue during the pre-installation of Visual Studio 2003 on a Windows 2003 SP1 server that took me some time to fathom out. Checking the error log highlighted the following errors in particular:

[03/13/06,10:57:24] Microsoft FrontPage 2000 Web Extensions Client: ***ERRORLOG EVENT*** : Error code 1603 for this component means "Fatal error during installation.

[03/13/06,10:57:24] Microsoft FrontPage 2000 Web Extensions Client: ***ERRORLOG EVENT*** : Setup Failed on component Microsoft FrontPage 2000 Web Extensions Client

[03/13/06,10:57:27] Setup Runtime Files: ***ERRORLOG EVENT*** : Error code 1603 for this component means "Fatal error during installation.

[03/13/06,10:57:27] Setup Runtime Files: ***ERRORLOG EVENT*** : Setup Failed on component Setup Runtime Files

[03/13/06,10:57:30] Microsoft Visual J# .NET Redistributable Package 1.1: ***ERRORLOG EVENT*** : Error code 1603 for this component means "Fatal error during installation.

[03/13/06,10:57:30] Microsoft Visual J# .NET Redistributable Package 1.1: ***ERRORLOG EVENT*** : Setup Failed on component Microsoft Visual J# .NET Redistributable Package 1.1

[03/13/06,10:57:32] setup.exe: ***ERRORLOG EVENT*** : Unable to open g_szRegkeyMSIntegration in CSetupManager::RemoveSetupFiles()

[03/13/06,10:57:32] setup.exe: ***ERRORLOG EVENT*** : CSetupManager::RemoveSetupFiles() failed in CSetupManager::RunInstall()

[03/13/06,10:57:32] VS70BaseUI: ***ERRORLOG EVENT*** : DepCheck indicates Microsoft FrontPage 2000 Web Extensions Client is not installed.

[03/13/06,10:57:32] VS70BaseUI: ***ERRORLOG EVENT*** : DepCheck indicates Setup Runtime Files is not installed.

[03/13/06,10:57:32] VS70BaseUI: ***ERRORLOG EVENT*** : DepCheck indicates Microsoft Visual J# .NET Redistributable Package 1.1 is not installed.

After some considerable amount of time researching what could be the root cause, I stumbled across the following KB article that led me to the answer http://support.microsoft.com/default.aspx?scid=kb;en-us;327763

In my scenario the servers that I received had an incorrect mapping for the “My Documents” folder, which pointed to a network folder that did not exist. I changed this to point to a temporary folder located on the local machine and the installation continued successfully.

I hope this post may help save someone else time.


BizTalk - [DBNETLIB][ConnectionWrite (send()).]General network error. Check your network documentation

At my current client they have been relatively slow on the uptake of Windows Server 2003 SP1, so those of us working within the Integration Services team have not had to deal with any complications that this service pack has introduced to BizTalk. Recently however we have been installing SP1 and have noticed a number of errors that have been introduced because of this.

We observed that BizTalk Host Instances were being stopped and restarted automatically. Following this up in the Windows Event Log we noticed a number of error messages relating to DBNETLIB and other entries indicating that there were issues relating to network connectivity. Some captures of these are shown below.

eventlog1.JPG

eventlog2.JPG

After some research we came across the following Knowledge Base article at Microsoft: http://support.microsoft.com/default.aspx?scid=kb;en-us;899599

Now the symptoms described in this article are exactly what we were experiencing. Apparently Windows SP1 introduces some extra security feature that reduces the size of the queue for concurrent TCP/IP connections to the server, which helps to prevent denial of service attacks.

All well and good, however the article suggests the actual issue only materialises when TCP/IP is under heavy load, sometimes incorrectly identifying valid TCP/IP connections as a denial of service attack. However, we have been receiving the errors when the BizTalk Group was under no load whatsoever.

After implementing the registry modifications in that article the problems did disappear, but I am interested why the BizTalk Group was experiencing the condition at all when there was no load. I spent some time investigating what may be the root cause and the only conclusion I could come to was that it may be related to the number of host instances that we had within the BizTalk Group; there were 40 in this case.

I have not had the time to investigate this any further, although a simple enough test would be to see whether the errors materialise with less host instances. One other thing that I did notice after installing Windows 2003 SP1 though was the number of security log entries. Is it just me or do we now see a huge increase in the number of entries? Something else I would like to investigate time permitting.

Just a final note, I have seen this occur with both BizTalk 2004 and BizTalk 2006.


BizTalk 2004 - New Transaction Cannot Enlist in the Specified Transation

We recently encountered an issue on one of our BizTalk 2004 Groups that took quite a long time to figure out, so I thought I would post about this for self future reference and also in case anyone else ever stumbles across the same problem.

The group configuration consisted of two BizTalk servers, two SQL Servers clustered in an active/passive mode, one of these containing the Message Box the other hosting the other BizTalk databases. We also had a separate Analysis Services database.

Once everything had been installed and BizTalk was configured we noticed we were getting intermittent errors simply when browsing the adapters within the BizTalk Administration Console. These were related to transactions, as shown in the following capture:

MSDTCError.JPG

Numerous checks were made to ascertain that MSDTC was functioning correctly and had the correct security settings. Generally, if you experience any errors that mention transaction in the description you first point of call should be to make sure that the MSDTC security settings are not restricting you. However, in our case this was all working fine and running tests using DTCPing, DTCTester and the like did not reveal anything either.

The other interesting (or should I say frustrating) aspect of this error was due to its intermittent regularity. This made it particularly difficult to debug. However, once we installed an orchestration on the server the error become more prevalent. We could now replicate a similar error on demand by simply attempting to stop an orchestration within BizTalk Administrator, with an error “A connection with the transaction manager was lost”.

After various investigations and discussions with PSS a short-term fix was found where taking the Management Database cluster resource offline, bringing it back online and restarting the SQL Server would solve the problem.

However the actual issue has been addressed with Windows 2003 SP1 (which was not installed on these servers), so if you have that applied you are in luck. If you cannot apply Windows 2003 SP1 though you must install the following HotFix that addresses the issue:

http://support.microsoft.com/default.aspx?scid=kb;en-us;895250


Jobs

(Shameless plug)

Looking to work in a high quality position for a high quality consultancy? Look to the left where the latest positions at Conchango are available.

Oh, and if you do happen to get a job here don't forget to say where you found out about the position :-)

I don't think I need to say any more...


BizTalk 2006 – Configuration with Cross Domain Local Groups Workaround

Further to my previous post on the issues I was experiencing with the configuration of BizTalk 2006 with cross domain local groups, we now have a workaround that is acceptable to our client.

A temporary account should be created in the group domain that will be used for the configuration so we can get past this stage. Once the configuration is completed, the correct accounts can be set-up and the temporary account can be removed. This takes form of the following steps:

SSO Configuration

  • Configure SSO using the temporary account
  • Change the account that the SSO Service executes under to the correct, permanent account
  • Restore the master secret and restart the server (using ssoconfig or the MMC)

BizTalk Runtime Configuration

  • Configure the runtime using the temporary account
  • Change the Host Instance account to be the correct, permanent account (using BizTalk Administrator)

Note that this temporary account will need to be in the following groups

  • Isolated Host Users Group
  • Host Users Group
  • SSO Administrators Group

This issue is evident in BizTalk Server 2006 beta 2. Obviously this may be fixed prior to release, but as far as I am aware the issue is caused by an external component so I wouldn't expect there to be a fix prior to release.


BizTalk 2006 - Configuration with Cross Domain Local Groups

We are currently experiencing a bit of pain at my current client trying to configure BizTalk 2006 in a multiserver environment. The Active Directory configuration that this installation must adhere to consists of two forests. One of these contains all the production accounts, the other which is trusted by the first. Accounts from the domain in the first forest are put into domain local groups in the second.

This has all worked fine in our BizTalk 2004 installations, we have never experienced issues related to this set-up. However, while attempting to run through the configuration in BizTalk 2006 there have been numerous issues when defining the account to use for the Windows Service and/or the group assigned against the BizTalk role. The error messages have been similar to the following:

Error: Failed to add the user 'DOMAIN1\INSTALL_USER to the domain group 'DOMAIN2\SSO_ADMINISTRATORS_GROUP'. To add members to domain groups you must have sufficient permissions in the domain (SSO)

Additional Information:- 0x000008AC The group name could not be found

Where:

  • DOMAIN1 = Domain in forest where accounts are held
  • DOMAIN2 = Domain in other forest where groups are held
  • INSTALL_USER = Account of user undertaking the configuration
  • SSO_ADMINISTRATORS_GROUP = Domain group set-up for use as SSO Administrators

Now, the error would lead you to believe that either the account or group doesn't exist, or that the account isn't a member of the group. However this is not the case and there is ongoing dialog between us and Microsoft as to what is the cause of the issue. It seems there have been problems realting to cross domain local group Active Directory configurations and I will be posting a follow-up when a solution or workaround has been found. This is just a heads up that if you are going to be using such a configuration, be wanred that you may obtain a headache rather quickly.

We did manage to get past the checking that occurs during the Enterprise SSO configuration by entering a debug registry key entry that will turn the Error you get in this scenario into a Warning. Errors stop you from continuing with any further configuration steps, whereas a warning will not. This is achieved by entering the following:

  • Create the following reg key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ENTSSO\Debug
  • Create the following DWORD value under this ConfigWarningsOnly
  • Set the value to 1
  • Restart the Configuration Wizard

Although this allowed us to progress, it didn't allow us to complete the configuration as a similar issue occurs when you enter the BizTalk Runtime configuration. Another check occurs here between the accounts and groups you enter, and as they are also using the same AD configuration as the SSO account and group the same problem arises.

As I said, I will keep you posted on the outcome of this and as usual note that this has been experienced with beta 2 of the product and may not be an issue in later releases.


BizTalk 2006 - WMI Create Send Handler

Trying to automate the process of creating Send Handlers in BizTalk 2006? You may be trying to use the class MSBTS_SendHandler, as shown in the snippet of code below. However, the class to be used in BizTalk 2006 is now MSBTS_SendHandler2 as the old one does not support creation of multiple send handlers, a constraint in BizTalk 2004.

' Explicit declaration of variables
Option Explicit

' wbemChangeFlagEnum Setting
const UPDATE_ONLY = 1
const CREATE_ONLY = 2

' Retrieve the arguments passed
'Dim objArgs: Set objArgs = WScript.Arguments

' Connects to local server WMI Provider BizTalk namespace
Dim objLocator : Set objLocator = Createobject ("wbemScripting.SWbemLocator")
Dim objService : Set objService = objLocator.ConnectServer(".", "root/MicrosoftBizTalkServer")

' Get WMI class MSBTS_ReceiveHandler
Dim objSendHandler : Set objSendHandler = objService.Get ("MSBTS_SendHandler")

Dim objSH : Set objSH = objSendHandler.SpawnInstance_

objSH.AdapterName = "FILE"
objSH.HostName = "FILE_SendHost"

On Error Resume Next
' Create instance
objSH.Put_(CREATE_ONLY)
CheckWMIError
On Error Goto 0


BizTalk 2006 - Beta 2 Windows Group Concatenation
Just a quick post to point out that if you are configuring a BizTalk 2006 server and your group name length is over a certain amount of characters (around about 50 I think), then don't browse for the group, instead manually edit the group name within the text box. Otherwise you will find that the group name is truncated. This has been fixed for the RC build, so will only be an issue for the current beta 2 build.
BizTalk 2006 – MOM 2005 Throttling Scripts

At my current client we have implemented various operational tools to manage suspended queues, cleaning up dead messages, monitoring states and throttling. We had created a lot of these utilities to achieve functionality that could either not be produced easily through the standard BizTalk 2004 interface, the functionality provided was not enough to meet our requirements or there was some necessity to implement some automation.

A lot of these operational utilities were developed as either services or scheduled tasks using an appropriate scheduling mechanism such as SQL Jobs or Windows Scheduled Tasks. Some investigation had taken place into MOM, but at the time the 2000 version that was reviewed was not going to be deployed within the company.

During our current development using BizTalk 2006 we have had the opportunity to investigate the use of MOM 2005 as part of the overall solution. This has obviously lead to some initial review of whether it can be used to provide the operational utilities that were previously developed in a more accessible manner, along with any improvements in development time.

This leads me on to the purpose of this blog posting. One of the operational utilities that is offered as part of the service I am implementing on BizTalk 2006 is the ability to throttle Receive Locations. There is a requirement stating that if a publisher is submitting messages at such a rate whereby the BizTalk Group cannot handle the load, then an automated mechanism of disabling and enabling the Receive Location should exist.

For example, you have determined that the hardware and configuration of your BizTalk Group can handle scenarios where the host queue associated to that Receive Location is backing up to approximately 100 instances. You may want to throttle the Receive Location when the queue gets above this threshold so that the whole BizTalk Group does not sustain sufficient strain to cause itself problems.

At this point it may be worthwhile noting that you can actually throttle BizTalk at various levels from within the BizTalk Administration Console as shown in the figures below

ThrottlingHostProperties.JPG

Figure 1 - Host Throttling Properties

ThrottlingThresholds.JPG

Figure 2 – Throttling Thresholds

The standard throttling may be more applicable to your own requirements - although it does not provide quite the flexibility of your own implementation - and in any event would also be the fall back mechanism for the solution discussed in this post. Also, please note that any figures discussed here are purely for demonstration purposes only, they are not realistic.

Anyway, with BizTalk 2006 you now have a number of extra performance counters that can be extremely useful. One of these is the Host Queue Length as shown below

HostQueueLength.JPG

Figure 3 – Host Queue Length Performance Counter

Before this was exposed in BizTalk 2006 you probably wrote stored procedures that returned you the queue lengths that you were interested and called these from your operational utilities. Fortunately you do not need to be concerned with this anymore and as they are exposed as performance counters we can employ them within a MOM 2005 utility.

As discussed above, we wish to throttle a specific Receive Location when it hits a certain threshold. What does this entail? Well, standard throttling means that when an observed figure goes above the threshold for a specific item then the item is disabled until a time at which the observed figure goes below another threshold. These are referred to as High and Low Watermarks.

So what we need to do is identify when the Host Queue counter shown above gets above the High Watermark and disabled a specified Receive Location. Then, once BizTalk has managed to process some of the backlog and the Host Queue counter resumes to a level below a Low Watermark then re-enable the Receive Location. This will be achieved using Performance Rules in MOM 2005 that fire Response scripts when the watermarks are met.

Firstly, we create a Rule Group in MOM 2005 that will group these rules (and any other you may deem appropriate) together. Within the MOM 2005 Administrator Console, we navigate to the Management Packs  Rule Groups node, right-click and select Create Rule Group. You will then be presented with a screen similar to that shown below. Just enter some appropriate information.

CreateRuleGroup.JPG

Figure 4 – New Rule Group Properties

A generic Knowledge Base screen will appear that allows you to enter useful related information as part of your company’s Knowledge Base, just skip that screen for the moment by clicking Finish. You will then be prompted whether you wish to deploy to a group of computers.

deployrulesprompt.JPG

Figure 5 – Rule Deployment Prompt

You then need to select the Computer Group that you wish to deploy to if you have one set-up or do this at a later date. For further information on Computer Groups, please refer to your MOM 2005 documentation. You should now have a newly created Rule Group as shown in the following figure

mom2005adminrulegroup.JPG

Figure 6 – MOM 2005 Administrator

We are creating Performance Rules, so navigate to the Performance Rules node within the newly created Rule Group, right-click and select Create Performance Rule. You will then be prompted to select a type of Performance Rule. As we wish to execute scripts based upon a threshold being met, select the Compare Performance Data (Threshold) option.

The next screen is trying to obtain what Provider to use. We need a new Windows NT Performance Counter Provider for the Host Queue counter we identified earlier. Click on the New button to create this provider and then use the dialog box that opens to choose this performance counter. At this point you need to browse to the Computer that contains the BizTalk 2006 installation and select the Host Queue performance counter much in the same manner as if you were using Performance Monitor, as shown in the figure below.

ruleperfcounter.JPG

Figure 7 – Windows Performance Counter Provider Properties

Notice that we simply use the <All> hosts selection, which will return the queue depth for all the hosts in the BizTalk Group. We also use a sample rate of every 5 seconds and simply stick with the default naming. As mentioned previously, these figures and selections are simply used for demonstration purposes and can be altered to your requirements.

Now we have set-up this Windows Performance Counter Provider we want to set the threshold at which our script will execute. Back on the original dialog box we simply scroll through all the selections leaving them default until the Threshold Rule Properties – Threshold dialog. At this point we are defining the Performance Rule to use for disabling a Receive Location, so we will enter a High Watermark value in this dialog box. This is shown below:

rulethreshold.JPG

Figure 8 – Threshold Rule Properties

Notice that we are using the “greater than the following value” option and specifying 100. This will mean that the script we wish to fire will do so once the Host Queue value exceeds 100.

The next screen in the wizard allows you to define an alert to raise when this criteria has been met. Once again, this all depends on your own particular requirements, but I would have this on at the very least during development and testing, as it assists in debugging any issues you may experience.

thresholdalert.JPG

Figure 9 – Threshold Alert Properties

Scroll through the Alert Supression screen leaving the default alert suppression so that you do not receive unnecessary alerts and then you arrive at the Responses dialog box. This is where you define the response to this Performance Rule being met and where we wish to execute our script to disable the Receive Location.

Choose Add  Launch a Script and you will be prompted with the Launch a Script dialog box. You may select an existing script you have created from here or define a new one. We will be entering a new one for this demonstration, so click the New button. You will be asked to enter a name and description for the script and then select the Language that the script is written in.

genscriptproperties.JPG

Figure 10 – General Script Properties

Enter some appropriate information, make sure the VBScript language is selected and click Next. You will then be shown an area where you may enter your script.

Now, I have been quite impressed with MOM 2005, but this is one of the areas that certainly need improvement. Not only does this dialog box not resize, but there are none of the User Interface improvements that you are used to in products such as Visual Studio. So you are left working with a bog standard text box. Not the most exhilarating experience that’s for sure. I tend to write the script elsewhere and debug as much as possible using cscript and then port it for MOM 2005 and paste into this teeny box.

The script you need to paste here is shown below. Note that this is still a Proof of Concept at this stage and I do need expect to be held liable if it affects your system in any way! By the time you have read this it may have changed already (a prime example is to add multiple Receive Locations), so simply use it as a basis for understanding the conceptual points I am trying to discuss.

'--------------------------------------------------------------------------
'
' WMI script to disable the specified Receive Location. The Receive Location
' to disable is specified by name as an argument passed to the script.
'
'--------------------------------------------------------------------------
' History:
'
' (03-Jan-2006 Matt Hall) - Created
'
'--------------------------------------------------------------------------

' Explicit declaration of variables
Option Explicit

' Event Constant definitions
Const EVENT_TYPE_SUCCESS = 0
Const EVENT_TYPE_ERROR = 1
Const EVENT_TYPE_WARNING = 2
Const EVENT_TYPE_INFORMATION = 4
Const EVENT_TYPE_AUDITSUCCESS = 8
Const EVENT_TYPE_AUDITFAILURE = 16

' VarSet Constants
Const RECEIVE_LOCATION_CHECKER_NAME = "Receive Loc Checker"
Const RECEIVE_LOCATION_CHECKER_STATE = "Receive Loc Checker State"

' Receive Location Checker States
Const RECEIVE_LOCATION_ENABLED = 1
Const RECEIVE_LOCATION_DISABLED = 0

' Retrieve the DebugMode parameter to determine whether we want to be in debug mode
Dim blnDebugMode : blnDebugMode = CBool(GetParam("DebugMode"))

' Start processing
If GetReceiveLocationState = RECEIVE_LOCATION_ENABLED Then
 If blnDebugMode = true Then
  CreateDebugEvent("GetReceiveLocationState returned true")
 End If
 Call DisableReceiveLocation()
 SetReceiveLocationState(RECEIVE_LOCATION_DISABLED)
 
Else
 If blnDebugMode = true Then
  CreateDebugEvent("GetReceiveLocationState returned false")
 End If
End If

'--------------------------------------------------------------------------
'
' Subroutine that disables the specified Receive Location
'
'--------------------------------------------------------------------------
Sub DisableReceiveLocation()

 ' If we are in debug mode then create an event to indicate we have entered the DisableReceiveLocation sub routine
 If blnDebugMode = true Then
  CreateDebugEvent("DisableReceiveLocation Start")
 End If

 ' Get the Receive Location name that was passed
 Dim strReceiveLocationName : strReceiveLocationName = GetParam("RecLoc")

 ' Build a query to retrieve the WMI object containing this Receive Location
 Dim strQuery : strQuery = "SELECT * FROM MSBTS_ReceiveLocation WHERE Name =""" & strReceiveLocationName & """"
 Dim objRecLocs : Set objRecLocs = GetObject("Winmgmts:!root\MicrosoftBizTalkServer").ExecQuery(strQuery)

 ' If we are in debug mode then create an event to display the receive location information
 If blnDebugMode = true Then
  CreateDebugEvent("strReceiveLocationName = " & strReceiveLocationName & ", strQuery = " & strQuery & ", objRecLocs.Count = " & cStr(objRecLocs.Count))
 End If

 ' If a Receive Location was found matching the specified name then disable it
 If objRecLocs.Count > 0 then
  Dim objRecLoc
  For Each objRecLoc in objRecLocs
   objRecLoc.Disable
  Next
 ' Otherwise a Receive Location was not found matching that name, so output this to the ScriptContext
 Else
  CreateEvent 100, EVENT_TYPE_INFORMATION, "DisableReceiveLocationScript", "A Receive Location was not found matching the name equal to " & strReceiveLocationName
 End If

 Set objRecLocs = Nothing
   
End Sub

'--------------------------------------------------------------------------
'
' Function that returns the specified parameter value from the ScriptContext
'
'--------------------------------------------------------------------------
Function GetParam(strParamName)
 Dim objParameters : Set objParameters = ScriptContext.Parameters
 Dim vntVariable : vntVariable = objParameters.get(strParamName)

 Set objParameters = Nothing

 GetParam = vntVariable
End Function


'--------------------------------------------------------------------------
'
' Subroutine that submits an event to the ScriptContext
'
'--------------------------------------------------------------------------
Sub CreateEvent(intEventNumber, intEventType, strEventSource, strEventMessage)
 Dim objEvent : Set objEvent = ScriptContext.CreateEvent()
 objEvent.EventSource = strEventSource
 objEvent.EventNumber = intEventNumber
 objEvent.EventType = intEventType
 objEvent.Message = strEventMessage
 ScriptContext.Submit objEvent
 Set objEvent = Nothing

End Sub

'--------------------------------------------------------------------------
'
' Subroutine that takes a string and submits an appropriate event to the
' ScriptContext for debugging output
'
'--------------------------------------------------------------------------
Sub CreateDebugEvent(strDebugOutput)
 ' Note that we prefix the message even though this appears in the Source of the event as it makes it easier to
 ' read when viewing the log
 CreateEvent 100, EVENT_TYPE_INFORMATION, "DisableReceiveLocationScript Debug", "DisableReceiveLocationScript: " & strDebugOutput
End Sub

'--------------------------------------------------------------------------
'
' Function that returns the state of the Receive Location we are checking
'
'--------------------------------------------------------------------------
Function GetReceiveLocationState()

 ' Debug output showing function has started
 If blnDebugMode = true Then
  CreateDebugEvent("GetReceiveLocationState Started")
 End If

 ' Return the string to use for the name of the VarSet
 Dim strReceiveLocCheckName : strReceiveLocCheckName = ReceiveLocationCheckerNameByMachine

 ' Debug output showing the VarSet name we will be using
 If blnDebugMode = true Then
  CreateDebugEvent("strReceiveLocCheckName = " & strReceiveLocCheckName)
 End If

 ' Obtain the ScriptState
 Dim objScriptState : Set objScriptState = ScriptContext.GetScriptState()
 
 ' Obtain the VarSet containing the state value we require
 Dim objRecLocCheckerVarSet : Set objRecLocCheckerVarSet = objScriptState.GetSet(strReceiveLocCheckName)

 ' Obtain the state value
 Dim vntRecLocCheckerState : vntRecLocCheckerState = objRecLocCheckerVarSet.get(RECEIVE_LOCATION_CHECKER_STATE)
 
 ' Debug output showing the state value
 If blnDebugMode = true Then
  CreateDebugEvent("vntRecLocCheckerState returned " & CStr(vntRecLocCheckerState))
 End If
 
 ' Release resources
 Set objScriptState = Nothing
 Set objRecLocCheckerVarSet = Nothing

 ' Return state value
 GetReceiveLocationState = vntRecLocCheckerState
End Function


'--------------------------------------------------------------------------
'
' Sub routine that sets the Receive Location state in the ScriptContext so
' we can query this value between both the disable and enable scripts. This
' allows us to determine the state of the Receive Location without having
' to undertake any unnecessary processing.
'
'--------------------------------------------------------------------------
Sub SetReceiveLocationState(intReceiveLocationState)

 ' Debug output showing sub procedure has started
 If blnDebugMode = true Then
  CreateDebugEvent("SetReceiveLocationState Started")
 End If

 ' Return the string to use for the name of the VarSet
 Dim strReceiveLocCheckName : strReceiveLocCheckName = ReceiveLocationCheckerNameByMachine

 ' Debug output showing the VarSet name we will be using
 If blnDebugMode = true Then
  CreateDebugEvent("strReceiveLocCheckName = " & strReceiveLocCheckName)
 End If

 ' Obtain the ScriptState
 Dim objScriptState : Set objScriptState = ScriptContext.GetScriptState()

 ' Obtain the Receive Location Checker VarSet
 Dim objRecLocCheckerVarSet : Set objRecLocCheckerVarSet = objScriptState.GetSet(strReceiveLocCheckName)

 ' Save variable changes back to the VarSet
 Call objRecLocCheckerVarSet.put(RECEIVE_LOCATION_CHECKER_STATE, intReceiveLocationState)
 
 ' Save the VarSet
 Call objScriptState.SaveSet(strReceiveLocCheckName, objRecLocCheckerVarSet)
 
 ' Release resources
 Set objScriptState = Nothing
 Set objRecLocCheckerVarSet = Nothing
End Sub

'--------------------------------------------------------------------------
'
' Function that returns the Receive Location Checker Name value to use for
' storing the VarSet. We add the Target Computer so we know which BizTalk
' Server in the Group we are executing the script against. We also use the
' Receive Location name that was passed as a parameter to this script so the
' script can be executed against multiple Receive Locations if required.
'
'--------------------------------------------------------------------------
Function ReceiveLocationCheckerNameByMachine()
 ReceiveLocationCheckerNameByMachine = RECEIVE_LOCATION_CHECKER_NAME + "#" + ScriptContext.TargetComputer + "#" + GetParam("RecLoc")
End Function

This script accepts a couple of parameters. The first of which is defining which Receive Location we are to be disabling, which is the unique name of the Receive Location. The second is simply a Debug parameter that I use in order to be able to output debug information to the MOM Alerts. If the debug parameter is set to true then the alerts are shown, otherwise they are not.

From the Script Properties – Parameters screen, click the Add button to add these two parameters to the script.

scriptparam1.JPG

scriptparam2.JPG

Figure 10 – Script Parameters to Add

Note that the names of these parameters must match those shown above, as they are referenced in the script. The value you enter is simply the default value to use and can be overridden by any Rule Responses that employ the script.

Click the Finish button and continue through the Rule definition dialog boxes using the default options until you reach the end where you must give it a name and save.

The above process has given you a quick walkthrough of how to set-up a Performance Rule that executes a script based upon a defined BizTalk 2006 Host Queue threshold. You must now add another rule that re-enables the Receive Location at a specified Low Watermark in the same manner as that which you have just created, using the script below.

Once you have added this rule you may deploy the rules to the BizTalk server you wish to test this on and then conduct some testing. For my test I simply flooded as many messages as I could into a File Receive Location that simply routed the messages to a folder on the same server. The results are shown in the following figure

 

Figure 11 – Performance Monitor Results

The white line shows the Host Queue length and you can observe the throttling in action by the peaks and troughs displayed. Obviously you can configure this to be more effective for your requirements and you can change the rate at which the Enable Receive Location checks so there is less time between the bursts of activity. But this post has simply been used as an introduction of what can be achieved with BizTalk 2006 and MOM 2005. I hope you have found it useful.


'--------------------------------------------------------------------------
'
' WMI script to enable the specified Receive Location. The Receive Location
' to enable is specified by name as an argument passed to the script.
'
'--------------------------------------------------------------------------
' History:
'
' (03-Jan-2006 Matt Hall) - Created
'
'--------------------------------------------------------------------------

' Explicit declaration of variables
Option Explicit

' Event Constant definitions
Const EVENT_TYPE_SUCCESS = 0
Const EVENT_TYPE_ERROR = 1
Const EVENT_TYPE_WARNING = 2
Const EVENT_TYPE_INFORMATION = 4
Const EVENT_TYPE_AUDITSUCCESS = 8
Const EVENT_TYPE_AUDITFAILURE = 16

' VarSet Constants
Const RECEIVE_LOCATION_CHECKER_NAME = "Receive Loc Checker"
Const RECEIVE_LOCATION_CHECKER_STATE = "Receive Loc Checker State"

' Receive Location Checker States
Const RECEIVE_LOCATION_ENABLED = 1
Const RECEIVE_LOCATION_DISABLED = 0

' Retrieve the DebugMode parameter to determine whether we want to be in debug mode
Dim blnDebugMode : blnDebugMode = CBool(GetParam("DebugMode"))

' Start processing
If GetReceiveLocationState = RECEIVE_LOCATION_DISABLED Then
 If blnDebugMode = true Then
  CreateDebugEvent("GetReceiveLocationState returned true")
 End If
 Call EnableReceiveLocation()
 SetReceiveLocationState(RECEIVE_LOCATION_ENABLED)
 
Else
 If blnDebugMode = true Then
  CreateDebugEvent("GetReceiveLocationState returned false")
 End If
End If

'--------------------------------------------------------------------------
'
' Subroutine that enables the specified Receive Location
'
'--------------------------------------------------------------------------
Sub EnableReceiveLocation()

 ' If we are in debug mode then create an event to indicate we have entered the EnableReceiveLocation sub routine
 If blnDebugMode = true Then
  CreateDebugEvent("EnableReceiveLocation Start")
 End If

 ' Get the Receive Location name that was passed
 Dim strReceiveLocationName : strReceiveLocationName = GetParam("RecLoc")

 ' Build a query to retrieve the WMI object containing this Receive Location
 Dim strQuery : strQuery = "SELECT * FROM MSBTS_ReceiveLocation WHERE Name =""" & strReceiveLocationName & """"
 Dim objRecLocs : Set objRecLocs = GetObject("Winmgmts:!root\MicrosoftBizTalkServer").ExecQuery(strQuery)

 ' If we are in debug mode then create an event to display the receive location information
 If blnDebugMode = true Then
  CreateDebugEvent("strReceiveLocationName = " & strReceiveLocationName & ", strQuery = " & strQuery & ", objRecLocs.Count = " & cStr(objRecLocs.Count))
 End If

 ' If a Receive Location was found matching the specified name then enable it
 If objRecLocs.Count > 0 then
  Dim objRecLoc
  For Each objRecLoc in objRecLocs
   objRecLoc.Enable
  Next
 ' Otherwise a Receive Location was not found matching that name, so output this to the ScriptContext
 Else
  CreateEvent 100, EVENT_TYPE_INFORMATION, "EnableReceiveLocationScript", "A Receive Location was not found matching the name equal to " & strReceiveLocationName
 End If

 Set objRecLocs = Nothing
   
End Sub

'--------------------------------------------------------------------------
'
' Function that returns the specified parameter value from the ScriptContext
'
'--------------------------------------------------------------------------
Function GetParam(strParamName)
 Dim objParameters : Set objParameters = ScriptContext.Parameters
 Dim vntVariable : vntVariable = objParameters.get(strParamName)

 Set objParameters = Nothing

 GetParam = vntVariable
End Function


'--------------------------------------------------------------------------
'
' Subroutine that submits an event to the ScriptContext
'
'--------------------------------------------------------------------------
Sub CreateEvent(intEventNumber, intEventType, strEventSource, strEventMessage)
 Dim objEvent : Set objEvent = ScriptContext.CreateEvent()
 objEvent.EventSource = strEventSource
 objEvent.EventNumber = intEventNumber
 objEvent.EventType = intEventType
 objEvent.Message = strEventMessage
 ScriptContext.Submit objEvent
 Set objEvent = Nothing

End Sub

'--------------------------------------------------------------------------
'
' Subroutine that takes a string and submits an appropriate event to the
' ScriptContext for debugging output
'
'--------------------------------------------------------------------------
Sub CreateDebugEvent(strDebugOutput)
 ' Note that we prefix the message even though this appears in the Source of the event as it makes it easier to
 ' read when viewing the log
 CreateEvent 100, EVENT_TYPE_INFORMATION, "EnableReceiveLocationScript Debug", "EnableReceiveLocationScript: " & strDebugOutput
End Sub

'--------------------------------------------------------------------------
'
' Function that returns the state of the Receive Location we are checking
'
'--------------------------------------------------------------------------
Function GetReceiveLocationState()

 ' Debug output showing function has started
 If blnDebugMode = true Then
  CreateDebugEvent("GetReceiveLocationState Started")
 End If

 ' Return the string to use for the name of the VarSet
 Dim strReceiveLocCheckName : strReceiveLocCheckName = ReceiveLocationCheckerNameByMachine

 ' Debug output showing the VarSet name we will be using
 If blnDebugMode = true Then
  CreateDebugEvent("strReceiveLocCheckName = " & strReceiveLocCheckName)
 End If

 ' Obtain the ScriptState
 Dim objScriptState : Set objScriptState = ScriptContext.GetScriptState()
 
 ' Obtain the VarSet containing the state value we require
 Dim objRecLocCheckerVarSet : Set objRecLocCheckerVarSet = objScriptState.GetSet(strReceiveLocCheckName)

 ' Obtain the state value
 Dim vntRecLocCheckerState : vntRecLocCheckerState = objRecLocCheckerVarSet.get(RECEIVE_LOCATION_CHECKER_STATE)
 
 ' Debug output showing the state value
 If blnDebugMode = true Then
  CreateDebugEvent("vntRecLocCheckerState returned " & CStr(vntRecLocCheckerState))
 End If
 
 ' Release resources
 Set objScriptState = Nothing
 Set objRecLocCheckerVarSet = Nothing

 ' Return state value
 GetReceiveLocationState = vntRecLocCheckerState
End Function


'--------------------------------------------------------------------------
'
' Sub routine that sets the Receive Location state in the ScriptContext so
' we can query this value between both the disable and enable scripts. This
' allows us to determine the state of the Receive Location without having
' to undertake any unnecessary processing.
'
'--------------------------------------------------------------------------
Sub SetReceiveLocationState(intReceiveLocationState)

 ' Debug output showing sub procedure has started
 If blnDebugMode = true Then
  CreateDebugEvent("SetReceiveLocationState Started")
 End If

 ' Return the string to use for the name of the VarSet
 Dim strReceiveLocCheckName : strReceiveLocCheckName = ReceiveLocationCheckerNameByMachine

 ' Debug output showing the VarSet name we will be using
 If blnDebugMode = true Then
  CreateDebugEvent("strReceiveLocCheckName = " & strReceiveLocCheckName)
 End If

 ' Obtain the ScriptState
 Dim objScriptState : Set objScriptState = ScriptContext.GetScriptState()

 ' Obtain the Receive Location Checker VarSet
 Dim objRecLocCheckerVarSet : Set objRecLocCheckerVarSet = objScriptState.GetSet(strReceiveLocCheckName)

 ' Save variable changes back to the VarSet
 Call objRecLocCheckerVarSet.put(RECEIVE_LOCATION_CHECKER_STATE, intReceiveLocationState)
 
 ' Save the VarSet
 Call objScriptState.SaveSet(strReceiveLocCheckName, objRecLocCheckerVarSet)
 
 ' Release resources
 Set objScriptState = Nothing
 Set objRecLocCheckerVarSet = Nothing
End Sub

'--------------------------------------------------------------------------
'
' Function that returns the Receive Location Checker Name value to use for
' storing the VarSet. We add the Target Computer so we know which BizTalk
' Server in the Group we are executing the script against. We also use the
' Receive Location name that was passed as a parameter to this script so the
' script can be executed against multiple Receive Locations if required.
'
'--------------------------------------------------------------------------
Function ReceiveLocationCheckerNameByMachine()
 ReceiveLocationCheckerNameByMachine = RECEIVE_LOCATION_CHECKER_NAME + "#" + ScriptContext.TargetComputer + "#" + GetParam("RecLoc")
End Function


BizTalk 2006 – ManageRefCountLog Job Fails in beta 2

If you have installed BizTalk 2006 with SQL Server 2005 you may have noticed that the MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb job is failing as shown in the job history capture below.

sql2005jobfail1.JPG

The detail of the error is as follows:

Executed as user: SomeUser. SQLServerAgent Error: Request to run job MessageBox_Message_Cleanup_BizTalkMsgBoxDb (from User SomeUser) refused because the job is already running from a request by User SomeUser. [SQLSTATE 42000] (Error 22022).  The step failed.

There is nothing to be concerned about however. The error stems from this job attempting to start a secondary sql agent job. If that job is already running we get an error. This job is important so do not disable it.

Update: Microsoft have posted a more detailed description on one of their blogs here


BizTalk 2006 - Beta 2 EDI Memory Leak

If you have installed the EDI option with BizTalk 2006 beta 2, but are not actively using it I would recommend that you disable it - just stop the BizTalk Base EDI Service in Service Manager. You may have noticed this already, but if not there is a memory leak in a covast component, displaying itself as the esp_srv.exe process slowly but surely eating up all your memory as a Task Manager screen capture shows below. Nasty little chap!

Note that this has been fixed for the next release.

esp_srv.JPG

Figure 1 - On this machine it had been running a week

 


BizTalk 2006 - Pipeline Component Wizard
I have used the Pipeline Component Wizard written by Martijn Hoogendoorn on a few occasions now and would say it is an excellent weapon in your BizTalk armoury, especially for those who are new to writing custom pipeline components. Up until now I had been using the old version with VS 2003 and then converting the project to VS 2005, as it had not been working with VS 2005. However, Martijn has now updated the wizard to work with BizTalk 2006 beta 2. You can download this from here.
Check the best products!
Coby CA-80 USB Power Adapter/Charger
US $9.00
End Date: Friday May-16-2008 23:02:29 PDT
Buy It Now for only: US $9.00
Buy it now | Add to watch list

MELISSA ETHERIDGE PIT TICKET! GREEK THEATRE LA CA 8/29
US $425.00
End Date: Friday May-16-2008 23:03:37 PDT
Buy It Now for only: US $425.00
Buy it now | Add to watch list

F-16C -25/32 Falcon Decals CA, TX ANG 1/48 1208 CDR A/C
US $9.99 (0 Bid)
End Date: Friday May-16-2008 23:04:04 PDT
Buy It Now for only: US $10.99
Bid now | Buy it now | Add to watch list

38''NATURAL CA ACOUSTIC GUITAR+STAND SAME DAY SHIPPING
US $0.01 (0 Bid)
End Date: Friday May-16-2008 23:04:15 PDT
Bid now | Add to watch list

DEATH VALLEY CA VINTAGE POSTCARD FOLDER SCOTTY'S CASTLE
US $3.99 (1 Bid)
End Date: Friday May-16-2008 23:05:00 PDT
Bid now | Add to watch list

38'' COFFEE CA ACOUSTIC GUITAR+STAND SAME DAY SHIPPING
US $0.01 (0 Bid)
End Date: Friday May-16-2008 23:05:04 PDT
Bid now | Add to watch list

PANASONIC CA-VDC300U IPOD AUDIO VIDEO INTERFACE CABLE
US $42.88
End Date: Friday May-16-2008 23:05:04 PDT
Buy It Now for only: US $42.88
Buy it now | Add to watch list

Olympus CAMEDIA D 40 Zoom 4.0 Megapixel 128 MB smart ca
US $37.00 (6 Bids)
End Date: Friday May-16-2008 23:05:23 PDT
Bid now | Add to watch list

Mobile Phone CA-64U Audio Video AV Cable for Nokia N93
US $5.99 (0 Bid)
End Date: Friday May-16-2008 23:05:34 PDT
Bid now | Add to watch list

 
Latest Fox News Feed
Broadcast for Wednesday, March 16, 2005
Wednesday, March 16, 2005 Host: Dr. Robert Evans
Broadcast for Tuesday, March 15, 2005
Tuesday, March 15, 2005 Host: Dr. Robert Evans
Broadcast for Monday, March 14, 2005
Monday, March 14, 2005 Host: Dr. Robert Evans
Regarding the Problem of Evil
Friday, March 11, 2005 Host: Dr. Robert Evans Series: Hot Topic Issues An Interview with Dr. Robert Evans and Dr. John Feinberg
Regarding the Problem of Evil
Thursday, March 10, 2005 Host: Dr. Robert Evans Series: Hot Topic Issues An Interview with Dr. Robert Evans and Dr. John Feinberg
The Problem of Evil
Wednesday, March 9, 2005 Host: Dr. Robert Evans Series: Hot Topic Issues Guest Speaker Dr. John Feinberg
Popular Fox News Searches
news feed WWF news latest for news feed news feed wwf nesws news web marketing madical news health news fox news News and Opportunities news sabah times digital camera news news right now fox news WWF NEWS Developer News medical news feed Search result for Related feed to KEPUTUSAN PERMOHONAN SMK TEKNIK Free And Clear Real Estate Articles By JOHN BECK related feed to permohonan borang kemasukan teknik vokasional Tips for Opening a Online Forex Trading Account

Copyright - fox news http://setifaq.org