This is a temporary post that was not deleted. Please delete this manually. (93c73d48-b1ee-4c97-86ab-9012a27469ba – 3bfe001a-32de-4114-a6b4-4005b770f6d7)
Filed under: BizTalk
This is a temporary post that was not deleted. Please delete this manually. (93c73d48-b1ee-4c97-86ab-9012a27469ba – 3bfe001a-32de-4114-a6b4-4005b770f6d7)
If you have multiple operations within a single contract, you may want to leverage the ActionMessageFilter in the Routing Service. Why might we use this filter? In one case, you could decide to multicast a message to all services that implement the same action. If you had a dozen retail offices who all implement a SOAP operation called “NotifyProductChange”, you could easily define each branch office endpoint in the Routing Service configuration and send one-way notifications to each service. I
n the case below, we want to send all operations related to event planning to a single endpoint and let the router figure out where to send each request type.
I’ve got two services. One implements a series of operations for occasions (event) that happen at a company’s headquarters. The second service has operations for dealing with attendees at any particular event. The WCF contract for the first service is as so:
[ServiceContract(Namespace="http://Seroter.WcfRoutingDemos/Contract")]
public interface IEventService
{
[OperationContract(Action = "http://Seroter.WcfRoutingDemos/RegisterEvent")]
string RegisterEvent(EventDetails details);
[OperationContract(Action = "http://Seroter.WcfRoutingDemos/LookupEvent")]
EventDetails LookupEvent(string eventId);
}
[DataContract(Namespace="http://Seroter.WcfRoutingDemos/Data")]
public class EventDetails
{
[DataMember]
public string EventName { get; set; }
[DataMember]
public string EventLocation { get; set; }
[DataMember]
public int AttendeeCount { get; set; }
[DataMember]
public string EventDate { get; set; }
[DataMember]
public float EventDuration { get; set; }
[DataMember]
public bool FoodNeeded { get; set; }
}
The second contract looks like this:
[ServiceContract(Namespace = "http://Seroter.WcfRoutingDemos/Contract")]
public interface IAttendeeService
{
[OperationContract(Action = "http://Seroter.WcfRoutingDemos/RegisterAttendee")]
string RegisterAttendee(AttendeeDetails details);
}
[DataContract(Namespace = "http://Seroter.WcfRoutingDemos/Data")]
public class AttendeeDetails
{
[DataMember]
public string LastName { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string Dept { get; set; }
[DataMember]
public string EventId { get; set; }
}
These two services are hosted in a console-based service host that exposes the services on basic HTTP channels. This implementation of the Routing Service is hosted in IIS and its service file (.svc) has a declaration that points it to the fully qualified path of the WCF Routing Service.
<%@ ServiceHost Language="C#" Debug="true" Service="System.ServiceModel.Routing.RoutingService,System.ServiceModel.Routing, version=4.0.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35" %>
The web configuration of the Routing Service is where all the fun is. I first defined the Routing Service (with name System.ServiceModel.Routing.RoutingService) and contract System.ServiceModel.Routing.IRequestReplyRouter. The Routing Service offers multiple contracts; in this case, I’m using the synchronous one which does NOT support multi-cast. My Routing Service has two client endpoints; one for each service created above.
Let’s check out the filters. In this case, I have two filters with a filterType of Action. The filterData attribute of the filter is set to the Action value for each service’s SOAP action.
<filters>
<filter name="RegisterEventFilter" filterType="Action" filterData="http://Seroter.WcfRoutingDemos/RegisterEvent"/>
<filter name="RegisterAttendeeFilter" filterType="Action" filterData="http://Seroter.WcfRoutingDemos/RegisterAttendee"/>
</filters>
Next, the filter table maps the filter to which WCF endpoint will get invoked.
<filterTable name="EventRoutingTable">
<add filterName="RegisterEventFilter" endpointName="CAEvents" priority="0"/>
<add filterName="RegisterAttendeeFilter" endpointName="AttendeeService" priority="0"/>
</filterTable>
I also have a WCF service behavior that contains the RoutingBehavior with the filterTableName equal to my previously defined filter table. Finally, I updated my Routing Service definition to include a reference to this service behavior.
<behaviors>
<serviceBehaviors>
<behavior name="RoutingBehavior">
<routing routeOnHeadersOnly="false" filterTableName="EventRoutingTable" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="RoutingBehavior" name="System.ServiceModel.Routing.RoutingService">
<endpoint binding="basicHttpBinding" bindingConfiguration=""
name="RoutingEndpoint" contract="System.ServiceModel.Routing.IRequestReplyRouter" />
</service>
</services>
What all this means is that I can now send either Attendee Registration OR Event Registration to the exact same endpoint address and the messages will route to the correct underlying service based on the SOAP action of the message.
Another useful way to route messages is by looking at the payloads themselves. The WCF Routing Service has an XPath filter that lets you poke into the message body to find a match to a particular XPath query. In this scenario, as an extension of the previous, we still have a service that processes events for California, and now we want a new service that receives events for Washington state. Our Routing Service should steer requests to either the California service or Washington service based on the “location” node of the message payload.
Within the routing configuration, I have a namespace table that allows me to set up an alias used during XPath queries.
<namespaceTable>
<add prefix="custom" namespace="http://Seroter.WcfRoutingDemos/Data"/>
</namespaceTable>
Next, I have two filters with a filterType of XPath and a filterData attribute that holds the specific XPath statement.
<filters>
<filter name="CAEventFilter" filterType="XPath" filterData="//custom:EventLocation='CA'"/>
<filter name="WAEventFilter" filterType="XPath" filterData="//custom:EventLocation='WA'"/>
</filters>
The filter table maps each XPath filter to a given endpoint.
<filterTables>
<filterTable name="EventRoutingTable">
<add filterName="CAEventFilter" endpointName="CAEvents" priority="0" />
<add filterName="WAEventFilter" endpointName="WAEvents" priority="0" />
</filterTable>
</filterTables>
When I call my (routing) service now and pass in a Washington event and a California event I can see that each distinct service is called.
Note that you can build XPath statements using operations that combine criteria. For instance, what if we wanted every event with an attendee count greater than 50 to go to the California service to be evaluated first. My filters below include the California filter that has an “or” between two criteria.
<filter name="CAEventFilter" filterType="XPath" filterData="//custom:EventLocation='CA' or //custom:AttendeeCount > 50"/>
<filter name="WAEventFilter" filterType="XPath" filterData="//custom:EventLocation='WA'"/>
As it stands, if I execute the Routing Service again, and pass in a WA location for 60 users, I get an error because BOTH filters match. The error tells me that “ Multicast is not supported with Request-Reply communication.” So, we need to leverage the priority attribute of the filter to make sure that the California filter is evaluated first and if a match is found, the second filter is skipped.
<add filterName="RegisterAndCAFilter" endpointName="CAEvents" priority="3" />
<add filterName="RegisterAndWAFilter" endpointName="WAEvents" priority="2" />
Sure enough, when I call the service again, we can see that I have a Washington location, but because of the size of the meeting, the California service was called.
There may arise a need to do more complex filters that mix different filter types. Previously we saw that it’s relatively easy to build a composite XPath query. However, what if we want to combine the SOAP action filter along with the XPath filter? Just enabling the previous attendee service filter (so that we have three total filters in the table) actually does work just fine. However, for demonstration purposes, I’ve created a new filter using the And type and combine the registration Action filter to each registration XPath filter.
<filters>
<filter name="RegisterEventFilter" filterType="Action" filterData="http://Seroter.WcfRoutingDemos/RegisterEvent"/>
<filter name="RegisterAttendeeFilter" filterType="Action" filterData="http://Seroter.WcfRoutingDemos/RegisterAttendee"/>
<filter name="CAEventFilter" filterType="XPath" filterData="//custom:EventLocation='CA' or //custom:AttendeeCount > 50"/>
<filter name="WAEventFilter" filterType="XPath" filterData="//custom:EventLocation='WA'"/>
<!-- *and* filter -->
<filter name="RegisterAndCAFilter" filterType="And" filter1="RegisterEventFilter" filter2="CAEventFilter"/>
<filter name="RegisterAndWAFilter" filterType="And" filter1="RegisterEventFilter" filter2="WAEventFilter"/>
</filters>
In this scenario, a request that matches both criteria will result in the corresponding endpoint being invoked. As I mentioned, this particular example works WITHOUT the composite query, but in real life, you might combine the endpoint address with the SOAP action, or a custom filter along with XPath. Be aware that an And filter only allows the aggregation of two filters. I have not yet tried making the criteria in one And filter equal to other And filters to see if you can chain more than two criteria together. I could see that working though.
The final filter we’ll look at is the “match all” filter which does exactly what its name says. Any message that arrives at the Routing Service endpoint will call the endpoint associated with the “match all” filter (except for a scenario mentioned later). This is valuable if you have a diagnostic service that subscribes to every message for logging purposes. We could also use this if we had a Routing Service receiving a very specific set of messages and we wanted to ALSO send those messages somewhere else, like BizTalk Server.
One critical caveat for this filter is that it only applies to one way or duplex Routing Service instances. Two synchronous services cannot receive the same inbound message. So, if I added a MatchAll filter to my current configuration, an error would occur when invoking the Routing Service. Note that the Routing Service contract type is associated with the WCF service endpoint. To use the MatchAll filter, we need another Routing Service endpoint that leverages the ISimplexDatagramRouter contract. ALSO, because the filter table is tied to a service behavior (not endpoint behavior), we actually need an entirely different Routing Service definition.
I have a new Routing Service with its own XML configuration and routing table. Back in my IEventService contract, I’ve added a new one way interface that accepts updates to events.
[ServiceContract(Namespace="http://Seroter.WcfRoutingDemos/Contract")]
public interface IEventService
{
[OperationContract(Action = "http://Seroter.WcfRoutingDemos/RegisterEvent")]
string RegisterEvent(EventDetails details);
[OperationContract(Action = "http://Seroter.WcfRoutingDemos/LookupEvent")]
EventDetails LookupEvent(string eventId);
[OperationContract(Action = "http://Seroter.WcfRoutingDemos/UpdateEvent", IsOneWay=true)]
void UpdateEvent(EventDetails details);
}
I want my new Routing Service to front this operation. My web.config for the Routing Service has two client endpoints, one for each (CA and WA) event service. My Routing Service declaration in the configuration now uses the one way contract.
<service behaviorConfiguration="RoutingBehaviorOneWay" name="System.ServiceModel.Routing.RoutingService">
<endpoint binding="basicHttpBinding" bindingConfiguration=""
name="RoutingEndpoint" contract="System.ServiceModel.Routing.ISimplexDatagramRouter" />
</service>
I have the filters I previously used which route based on the location of the event. Notice that both of my filters now have a priority of 0. We’ll see what this means in just a moment.
<filters>
<filter name="CAEventFilter" filterType="XPath" filterData="//custom:EventLocation='CA' or //custom:AttendeeCount > 50"/>
<filter name="WAEventFilter" filterType="XPath" filterData="//custom:EventLocation='WA'"/>
</filters>
<filterTables>
<filterTable name="EventRoutingTableOneWay">
<add filterName="CAEventFilter" endpointName="CAEvents" priority="0" />
<add filterName="WAEventFilter" endpointName="WAEvents" priority="0" />
</filterTable>
</filterTables>
When I send both a California event update request and then a Washington event update request to this Routing Service, I can see that both one-way updates successfully routed to the correct underlying service.
Recall that I set my filter’s priority value to 0. I am now able to multi-cast because I am using one-way services. If I send a request for a WA event update with more than 50 attendees (which was previously routed to the CA service), I now have BOTH services receive this request.
Now I can also able to use the MatchAll filter. I’ve created an additional service that logs all messages it receives. It is defined by this contract:
[ServiceContract(Namespace = "http://Seroter.WcfRoutingDemos/Contract")]
public interface IAdminService
{
[OperationContract(IsOneWay = true, Action = "*")]
void LogMessage(Message msg);
}
Note that it’s got an “any” action type. If you put anything else here, this operation would fail to match the inbound message and the service would not get called. My filters and filter table now reflect this new logging service. Notice that I have a MatchAll filter in the list. This filter will get called every time.
<filters>
<filter name="CAEventFilter" filterType="XPath" filterData="//custom:EventLocation='CA' or //custom:AttendeeCount > 50"/>
<filter name="WAEventFilter" filterType="XPath" filterData="//custom:EventLocation='WA'"/>
<!-- logging service -->
<filter name="LoggingServiceFilter" filterType="MatchAll"/>
</filters>
<filterTables>
<filterTable name="EventRoutingTableOneWay">
<add filterName="CAEventFilter" endpointName="CAEvents" priority="0" />
<add filterName="WAEventFilter" endpointName="WAEvents" priority="0" />
<!-- logging service -->
<add filterName="LoggingServiceFilter" endpointName="LoggingService" priority="0"/>
</filterTable>
</filterTables>
When I send in a California event update, notice that both the California service AND the logging service are called.
Finally, what happens if the MatchAll filter has a lower priority than other filters? Does it get skipped? Yes, yes it does. Filter priorities still trump anything else. What if the MatchAll filter has the highest priority, does it stop processing any other filters? Sure enough, it does. Carefully consider your priority values because only filters with matching priority values will guarantee to be evaluated.
The Routing Service has some pretty handy filters that give you multiple ways to evaluate inbound messages. I’m interested to see how people mix and match the Routing Service contract types (two-way, one-way) in IIS hosted services as most demos I’ve seen show the Service being self-hosted. I think you have to create separate service projects for each contract type you wish to support, but if you have a way to have both services in a single project, I’d like to hear it.
Architecture SIG Meeting - Special Date/Time
Thursday, January 20th (6 pm - 8:30 pm)
Windows Azure in the Real World:
Best Practices and Migration Tips
with David Pallmann
Summary:
Cloud computing with Windows Azure is exciting but it is vital to approach it correctly. In this talk, David Pallmann will share best practices and lessons learned from real-world use of Windows Azure, including application migration tips and stories from the trenches. If you want to succeed in your adoption of Windows Azure, this practical information will help you learn from the successes (and mistakes) of others.
Speaker: David Pallman
David Pallmann is a Windows Azure MVP and author of the upcoming book, The Azure Handbook. He is GM of the App Dev practice at Neudesic, a national Microsoft SI partner, where he leads cloud technical readiness, IP, and business development.
david.pallmann@neudesic.com
http://davidpallmann.blogspot.com
http://azuredesignpatterns.com
http://neudesic.com/cloud
When and Where
We'll be meeting on the 4th floor of the Microsoft La Jolla office. Pizza will be available at 6:00 PM. The meeting will start at 6:30.
Address:
9255 Towne Centre Dr San Diego, CA 92121 Map
PLEASE NOTE THAT PARKING ARRANGEMENTS HAVE CHANGED. YOU WILL HAVE TO PAY FOR PARKING IF YOU USE THE BUILDING LOT. WE SUGGEST YOU PARK ON THE STREET TO THE NORTH OF THE BUILDING OR IN THE UTC SHOPPING CENTER.
BizTalk Server is licensed using the Per-Proc licensing model. There are a couple of easy references that most everyone looking at licensing will have read and know.
First of there is the Multicore processor licensing site that clearly state that licensing is done per proc and not core (but everyone knows that by now) – http://www.microsoft.com/licensing/about-licensing/multicore-processor-licensing.aspx.
Then there is the BizTalk pricing and licensing FAQ (at http://www.microsoft.com/biztalk/en/us/pricing-licensing-faq.aspx) and the questions (the quoted anwers are not word by word, they are more my interpretation)
Q: "How is BizTalk Server licensed on computers that have more than one CPU?"
A: …Std Ed needs licenses for all procs available to windows even though it has a technical limitation of two (http://www.microsoft.com/biztalk/en/us/editions.aspx)…
Q: "Does BizTalk Server 2010 allow for virtualization?"
A: …Yes…Ent can be licensed on the physical servers procs running any number of virtual machines with BizTalk on them.
Then there is the volume licensing site for BizTalk Server 2009 / 2010 at http://www.microsoftvolumelicensing.com/userights/ProductPage.aspx?pid=359 which helps mostly just by pointing out the same basics. It explains how the product uses Per-Proc licensing and that you license on either physical or virtual procs and for Enterprise you can also use the “license physical procs and run any number of virtual procs†options. It also points out the current PUR (Product User Rights) document (available at MicrosoftProductUseRights(Worldwide)(English)(December2010), listing in different languages at http://www.microsoftvolumelicensing.com/userights/DocumentSearch.aspx?Mode=3&DocumentTypeId=1) that basically just repeats those same things with better formatting (ie, read that instead since the website really makes some parts hard to read). Per-Proc licensing starts at page 59.
This is an interesting section:
A. General License Terms. You have the rights below for each server you properly license.I) Licensing a Server. Before you run instances of the server software on a server, you must determine the number of licenses required and assign them to that server. a) Determining the Number of Licenses Required. The number of licenses required is based on either the total number of physical processors on the server (as described in option (i) below) or the number of virtual and physical processors used (as described in option (ii) below). For Enterprise Editions of the software, you may follow either option. For all other editions of the software, must follow option two. i) Unlimited Virtualization. Under this option, the number of software licenses required for a server equals the total number of physical processors on that server. Counting and assigning licenses based on this option permits you to run the server software in one physical and any number of virtual operating system environments (or OSEs) without regard to the number of physical and virtual processors used. This option is available to you only for enterprise editions of the software. ii) Licensing based on Processors Used. Under this option, the total number of software licenses required for a server equals the sum of the software licenses required under (A) and (B) below. This is the only option available to you for editions other than enterprise. (A) To run instances of the server software in the physical OSE on a server, you need a software license for each physical processor that the physical OSE uses. (B) To run instances of the server software in virtual OSEs on a server, you need a software license for each virtual processor1 that each of those virtual OSEs uses. If a virtual OSE uses a fraction of a virtual processor, the fraction counts as a full virtual processor. 1 A virtual processor is a processor in a virtual (or otherwise emulated) hardware system. Virtual OSEs use virtual processors. Solely for licensing purposes, a virtual processor is considered to have the same number of threads and cores as each physical processor on the underlying physical hardware system. So, for any given virtual OSE on a server on which each physical processor provides X logical processors, the number of licenses required is the sum of a) and b) below: a) one license for every X logical processors that virtual OSE uses b) one license if the number of logical processors it uses is not a whole number multiple of X
“X,†as used above, equals the number of cores, or where relevant, the number of threads in each physical processor. |
Ok, so you can either license using the unlimited virtualization option mention before, or per physical processor when installing on a physical machine - it will always be a one to one mapping at that point between processor and license, or you can also license per virtual processor. Here is were it gets muddy. Virtual processor… what’s in that term? You might at first think that it means a processor as it is visible to the virtual machine. In case of the below picture… 4.
You’d be wrong.
The text that tries to explain the essence of a Virtual Processor is difficult to interpret – for me at least, but then I ‘m a foreigner so you native US or other english spoken nationals might have no problem with it. You will find no further explanation in the above document. Enter the “Licensing Microsoft Server products in Virtual Environments†document (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9ef7fc47-c531-40f1-a4e9-9859e593a1f1&displaylang=en).
This brief (at page 14) talks about the physical cpu (and core) to virtual cpu relationship. Mostly the point being made is that even though cores from more then one physical cpu gets used – like two cores being used in a dual-core machine still just counts as one virtual proc and one license. What I don'’t like with this document is that I think the images are somewhat confusing as it constantly uses 2 procs and two cores and it seems to put those cores into the same virtual socket (I borrowed the picture for clarity).
Now it also states that even if you use just one core you will still need to pay for one license, which is an important note. As in “Never do that for BizTalk†.
It also does some attempts to count licenses under some sample deployments (on page 19) but (to me) it falls short here as well.
Now two find a better explanation to the above pictures… Enter the LadyLicensing blog and a post about the per-proc licensing of SQL Server. Now granted SQL Server and BizTalk Server is NOT the same product, but I assume that the licensing rules at this point that the licensing rules around per-proc licensing is shared since I’ve found no indication of otherwise.
Now I’ll use her visualization (since it really cleared things up for me) but redo it for BizTalk:
1. Gather the following data points of A B C
2. Calculate licenses needed
In this sample this would be filled in as:
Now that’s basically as clear as it can be, right? Well, yes, but…
With virtualization a virtual processor is often thought of as a core (at least I, not being an virtualization expert, do), and the sample above I assumes that is the case. In Hypervisors a virtual proc is really just something assigned a timeslot of execution. By default on both ESX and Hyper-V it seems to be the case that when a virtual processor is given time to execute this happens on a core. On both ESX and Hyper-V, through settings cpuid.coresPerSocket and “Virtual machine reserve†respectively, it is possible to equate virtual processors to a whole (or larger part of a) physical processor. I believe that in Hyper-V this does nothing for it’s representation in the virtual machine as other then a single processor, but in ESX makes it appears as a multi-core processor. In this case I am unsure, but I feel that a better fit for A in the calculation above then becomes “# physical cores used by virtual processors†rather then virtual processors, which is not nearly as clear. Now, how is this setting useful?
Well, remember Standard Edition technically merely supporting two processors? I don’t know for sure of course, but I feel pretty confident saying that if you have four virtual processors, which then maps to one license, BizTalk Server Standard will look at that as four separate processors and just use two even though that (kinda) maps to two cores. So these settings might be worth looking into.
I am also not certain that the number of Enterprise licenses that would be needed is really correct, but I’ll get back to that later.
Another interesting point I’ve come across is this (taken from the PUR):
Under General License Terms for Per-Proc licensed servers… a) Assigning the Required Number of Licenses to the Server. i) After you determine the number of software licenses you need for a server, you must assign that number of software licenses to that server. That server is the licensed server for all of those licenses. You may not assign the same license to more than one server. A hardware partition or blade is considered to be a separate server. ii) You may reassign a software license, but not on a short-term basis (i.e., not within 90 days of the last assignment). You may reassign a software license sooner if you retire the licensed server due to permanent hardware failure. If you reassign a license, the server to which you reassign the license becomes the new licensed server for that license. |
Basically – you have to guarantee that your virtual machine always is activated on one and only one host. It cannot “float around†. It’s unfortunate that this is not clarified in the same document (that I have found), but I have found another document, the Mobility Brief that states that BizTalk Server Enterprise is exempt from this rule, while it still seems to apply to Standard Edition. Also note that while that document talks about 2006 R2 I am assuming it applies equally to BizTalk Server 2010 as I’ve found nothing that says otherwise.
In the past, Microsoft server software and EC licenses have had to be assigned to a specific server for at least 90 days before they could be reassigned to another server. Therefore, for example, if you wanted to move running instances of software from one server to another more frequently, you needed to assign licenses to both servers. With Microsoft’s new terms for certain products, Microsoft waives the 90-day reassignment rule, allowing you to reassign licenses from one server to another within a server farm as frequently as you need to. This allows you to freely move both licenses and running instances within a server farm from one server to another. In the example above, so long as you are not running the software on both servers at one time, you can do this without having to assign licenses to both servers at the same time. |
This might also be what the following clause in the PUR details.
For BizTalk Server 2010 Standard Edition: Networked Clusters. The server software may not be used on a server that is part of a networked cluster, or in an OSE that is part of a networked cluster of OSEs on the same server. |
This could also mean that: “You cannot cluster BizTalk Server Standard†, which given that it’s a single server license also makes total sense. But add the two sources together and I don’t think that’s solely what it means.
Also mentioned by the mobility brief is that:
Today, with licensing for Per Processor products like Microsoft® SQL Server® 2008 Enterprise and Microsoft BizTalk® Server 2006 R2 Enterprise Edition, you can run unlimited software instances in physical operating system environments (OSEs), virtual OSEs, or both on your individual servers by counting all of each server’s physical processors and assigning it that number of licenses. With the new rules, as an alternative to simply counting all of a server’s physical processors and assigning that number of licenses, you may count the number of the server’s physical processors that support OSEs in which server software instances are running at any one time, and assign that number of licenses. This applies both to physical processors being used by physical OSEs in which instances are running and to physical processors supporting virtual OSEs in which instances are running. … With the licensing changes, you effectively count the greatest number of physical processors at any time supporting OSEs in which instances are running across your server farm, and assign that number of licenses. |
Remember how I wasn’t sure about the number of Enterprise licenses needed in the calculation above? Well , my interpretation of this text is that if only some (let’s say one) of the processors on the physical machine support the virtual machine then that figure could have been one. This only really matters if you need Enterprise licenses for something, like if you have a web farm - according to the mobility brief. In Hyper-V, as I understand it, there is no way to set processor affinity (as in telling the virtual machine to only use one processor) and the load is spread across all processors – all processors support the virtual machine. However on VMware – it is (or might be, the KB suggests this is an old GSX setting but it’s also linked to from several ESX kb’s so it might still be valid?). This setting, combined with the cores in a virtual proc, would make figures for A B C more like this:
The text, to me, also suggests that if you on a two proc hexa-core machine want to run two virtual machines with one virtual proc used across a web farm you may get away with one license, but it has to be an Enterprise license. It’s an uncertain point for me at the moment.
Giving all these options and settings the variations to take into account are numerous.
And just because this is a licensing post, what about the “Additional Software†:
I) Running Instances of the Additional Software. You may run or otherwise use any number of instances of the additional software listed in the table below in physical or virtual OSEs on any number of devices. You may use those instances only with the server software. Use of any instance with the server software may be indirect, through other additional software, or direct. For all editions of BizTalk Server 2010
Only for BizTalk Server 2010 Branch Edition
|
This does not however, according to the pricing & licensing FAQ for BizTalk, include the Adapter Pack, and therefore not the AppFabric Connect features. Those must be used on a server with a valid license assigned. But then, what are the “Windows Communication Foundation Adapters†mentioned above if not the Adapter Pack? Odd… It doesn’t make sense for it to be the WCF-NetTcp et al adapters. Why would you install those on a separate machine? Not crystal.
An additional dimension to this is of course using SPLA licenses, which can be used when you are an outsourcing provider and supply licenses to clients. For now, I’ve decided not to cover those. The Product User Rights documents listing for SPLA can be found at: http://www.microsoftvolumelicensing.com/userights/DocumentSearch.aspx?Mode=3&DocumentTypeId=2
Like I said, I’d be happy to extend this post further with clarifications and corrections based on input so leave your comment to either point out corrections that needs to be made or to point out gaps that could be filled.
Resources used:
Thanks,
Late Friday afternoon, Clinical Data (CLDA) received news from the FDA that Viibryd (vilazodone HCl tablets) had been approved for patients with major depressive disorder. This is overwhelmingly positive news for the bulls of CLDA, but also for the whole biotech industry. It’s important to see a typically conservative regulator willing to approved a drug the first time through. This drug enters a market where 50% of patients are dissatisfied with current treatment options, which accounted for $10 billion in sales. Viibryd has serious potential to generate significant revenue, especially something a large pharma with a dedicated sales team might be interested in order to protect future revenues beyond 2011.
The significance of this news and the recent failure at Forest Labs (FRX) have materially effected their value to soon to be new highs. We still continue to hear that a deal to acquire them is in the works, approval upped the interest to four other parties. Investors should consider that the notable biotech investor and Chairman of the Board at CLDA, Randal J. Kirk, owns around 11 million shares (or 36% of O/S). His style is to make very concentrated positions in good companies and take control. Consider that in 1993, he founded King Pharmaceuticals, which Pfizer (PFE) recently acquired in 2010. In 2007, Kirk sold New River Pharmaceuticals to Shire (SHPGY) for $2.7 billion. His cut was $1.2 billion. During the conference call, President and CEO Drew Fromkin, confirmed that the company was in serious discussions with interested parties possibly for a change of control transaction. They have had significant interest in their product and they need to explore the best potential deal. We believe that Randal Kirk will be able to sign a deal here soon.
MAC Viva Glam V Lipstick
I was digging through my MAC favorites this morning when I remembered a question asked by reader Sheila Z in the comments yesterday.
“Karen, I’ll be getting my makeup done this saturday at MAC for my brother-in-law’s engagement party. Part of the process requires that I buy at least 5 items. What are the top 5 you recommend?”
– Sheila Z
Hey Sheila,
Pardon me for this, but right now I feel Ready For The World! “Oh, oh, oh, oh, Sheila!”
(Please tell me you’re familiar with that song.)
With that out of the way, let’s get back to beauty. You’re going to have such a blast at the MAC counter on Saturday. For what it’s worth, here are my five (current) MAC must-haves.
I wield this multi-tasking goat hair fiber brush Every. Single. Day. It has its way with both cream and powder products, and I use it for everything from loose pigments to under-eye concealer.
This black gel liner stays put no matter what! I’ve shed a million tears with this stuff on, and it doesn’t budge for nothin’.
I really fancy this miracle working liquid concealer. Not only does it cover my dark circles well with its water-resistant formula, but it lasts all day long without fading, too. My one caveat? — it has a tricky pump.
If you like the look of browns with orange undertones, this matte shadow could be your new best friend. I wear it in the crease with smokey looks to give my eyes depth and dimension.
LOVE this shimmery neutral pink! I think it looks great on almost everyone, and 100% of the proceeds go to support men, women and children living with HIV/AIDS.
I also asked the gals on Twitter what their MAC must-haves are, and here’s what they had to say:
(...)
Read the rest of What Are Your Top 5 MAC Must-Haves? (52 words)
Copyright Karen of Makeup and Beauty Blog: Makeup Reviews, Beauty Tips and Drugstore Beauty Finds | Read the full article