PRB: PutOrderFormValue Requires High Isolation When Multiple Sites Are on the Same Server (325780)



The information in this article applies to:

  • Microsoft Commerce Server 2000

This article was previously published under Q325780

SYMPTOMS

When two Microsoft Commerce Server sites are configured to run on the same server, the order form may be populated with data from the wrong site if you call to the PutOrderFormValue method without all three parameters, as shown in the following sample code:
Set mscsOrderGrp = LoadBasket("{3991347A-1A14-4D0B-8D2E-FA52AF46C1A5}")

Set dictItem = Server.CreateObject("Commerce.Dictionary") 
dictItem.product_catalog = "generic"
dictItem.product_catalog_base = "generic"
dictItem.product_id = "Valerie"
dictItem.Quantity = 3
Call mscsOrderGrp.AddItem(dictItem)

Call mscsOrderGrp.PutOrderFormValue("locationId", "1" )
				

CAUSE

Because the call to the PutOrderFormValue method does not inculde the name of the order form, the wrong order form is updated. The PutOrderFormValue method is in Requisition.dll. This method cannot differentiate the OrderForm when more than one site is in the same Internet Information Services (IIS) pooled application.

RESOLUTION

Change the call to PutOrderFormValue so that it includes the OrderForm name as the third parameter:
Call mscsOrderGrp.PutOrderFormValue(sKey, sValue, sOrderFormName)
				
If you cannot change the site code, configure each site to have Application Protection set to High (Isolated). You can do this in the Commerce Server Manager. Locate the Default Web Site, and then set the properties on the two Virtual Directories. You also must apply the changes to all of your files.

STATUS

This behavior is by design.

MORE INFORMATION

Microsoft Commerce Server 2000 will work in your configuration in High (Isolated) mode. By default, Web services (Inetinfo.exe) runs in its own process, and other applications run in a single, pooled process (DLLHost.exe). The difference between in-process and out-of-process is a trade off that favors reliability instead of pure performance. The performance impact of having a single pooled process (DLLHost.exe) versus multiple pooled processes (by using another instance of DLLHost.exe) are minimal. The only savings that you get by having a single pooled process is that you do not have multiple copies of some DLLs in memory. You can address this issue by adding memory if your monitoring determines that this is the bottleneck for your server.

The danger of the default application setting is that if one application in the pool fails, it causes all applications (Microsoft Commerce Server sites) in the pool to fail. Although the Web server still runs, this does not help if you lose all of the Microsoft Commerce Server sites that are configured on your server. To avoid this problem, set these high priority applications to run as isolated processes.

Modification Type:MajorLast Reviewed:9/4/2002
Keywords:kbprb KB325780