Use for production

Jul 22, 2008 at 2:47 PM
Edited Jul 22, 2008 at 2:49 PM
Hi,

Sorry for the dump questions:

Question 1: Is MSE ready for production?

Question 2: Load-balance: Do I create boxes of MSE servers, and load balance them? What is the benefit/differences if I load balance the app server without MSE?

Thank you.

Best regards,
Khoon Seang
Developer
Jul 25, 2008 at 1:35 AM
Edited Jul 25, 2008 at 1:37 AM
Hi Khoon

#1:  There are companies and consulting firms that have used the CodePlex release for production solutions.  Our recommendation for mission critical solutions is to make sure your organization has a Premier agreement with Microsoft.  Through this agreement you would be able to get official support from Microsoft for the MSE.  Otherwise we are happy to respond to discussion items posted on CodePlex.  We do our best to respond and provide guidance and recommendations in a timely manner with planned updates posted to CodePlex on a quarterly basis.

#2:  We do recommend load balancing multiple MSE Runtime servers to ensure higher availability along with failover clustering of the Catalog Service and repository database.  The size of a load balancing farm will be determined by how much traffic is routed through the MSE and how complex the Policies (WCF behaviors) are that you apply to the MSE hosted endpoints.  Normally, the services being invoked are the key determiners in the load balancing solution.  The amount of work the MSE performs usually pails in comparison to the service logic.  If you already load balance existing web services that the MSE calls because of volume of activity or lengthy processing times of service logic, then the MSE Runtimes should likely be load balanced as well to ensure thread pools aren't exhausted.  This is similar to the planning and tuning efforts for load balancing ASP.Net solutions.  In some scenarios it even makes sense to install the MSE Runtimes where the service client's reside or where the service implementations reside.  This allows for a wider range of bindings that can further improve performance or facilitate certain service enablement scenarios of proprietary systems.  Clearly if your service clients are external to your organization or are desktops within your organization, running the MSE Runtimes on those machines is less attractive.  But for server-to-server scenarios these options can be interesting.
Aug 8, 2008 at 10:24 AM
Hi Botto,

Finally we bought the Premier agreement with Microsoft. Do you have any pointers to the consultant for MSE in production, along with SOA governance?

I have some questions here:
1. For the client to MSE, do they have to be HTTP binding? Can I use non-http based binding or non-soap based messaging?
2. I have managed to published endpoints to a Server 2008 UDDI services, but still my question is: is UDDI doing the load balancing or the MSE? If we are to use non-soap (non-WSDL) based communication, UDDI is out, so what should we do?

Thank you in advance.
Developer
Aug 8, 2008 at 5:45 PM

Hi Khoon-

The MSE can host any endpoint that can be described by a WCF Binding.  This means it can use a variety of the out-of-box bindings included with the WCF framework as well as any custom bindings you may want to create to support other transports, encodings, or protocols.  There is a sample custom binding in the installation of the MSE that demonstrates using POX (plain old xml, no soap).

UDDI is just the means to allow potential consumers to discover your service and obtain the information needed to connect and use your service (which can use any protocol).  Messages being sent to your services do not flow through UDDI. 

If you want to do load balancing, you would need to use a binding that is friendly to the load balancing strategy and tools you are using (http://msdn.microsoft.com/en-us/library/ms730128.aspx).

hope that helps.

Aug 11, 2008 at 8:13 AM
Edited Aug 11, 2008 at 8:22 AM
Hi Botto,

Thanks for your reply.

In WCF, I can have WSDL via HTTP for net.tcp bindings, such as:

<services>
   <service behaviorConfiguration="myServiceBehavior" name="myService">
    <endpoint address="" behaviorConfiguration="myEndPointBehavior"
     binding="netTcpBinding" bindingConfiguration="netTcpBinding"
     contract="IMyService" />
     <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
   </service>
</services>
   <behaviors>
       <serviceBehaviors>
          <behavior name="myServiceBehavior">
             <serviceMetadata httpGetEnabled="true" />
          </behavior>
       </serviceBehaviors>
    </behaviors>

But how do I create WSDL for Net.TCP endpoints? Or, how can I enable http access for the WSDL for net.tcp endpoints?

2. Regardding the POX: I see that it is created in "Load Default Binding.sql". So if we would want RESTful, how shall we extend it?

Thank you in advance.
Developer
Aug 13, 2008 at 2:29 AM
Both of these questions are really about WCF.  The serviceMetadata behavior will provide metadata for service endpoints for several different bindings.  Look at the AdvancedCalculator in the Introduction Lab and you'll see that accessing it's wsdl includes operations exposed over namedpipes and net.tcp.

As for RESTful services, you can look into using the webHttpBinding that WCF uses to expose RESTful services.  We haven't yet explored using this binding or associated behaviors with endpoints hosted in the MSE, but this should be doable.

hope that helps.