2010-10-15 18 views
4

Nous avons un service WCF qui est déployé sur deux serveurs. Les bits sont exactement les mêmes.Comment forcer le WSDL généré automatiquement sur deux machines à équilibrage de charge à correspondre?

Dans le WSDL généré automatiquement à https://mywebsite.com/SomeService/Soap.svc?wsdl, le nœud <wsdl:types> énumère un tas de XSD de, dans ce format:

<xsd:import schemaLocation="https://mywebsite.com/SomeService/Soap.svc?xsd=xsd0" namespace="http://services.mywebsite.com/account" /> 
... 
<xsd:import schemaLocation="https://mywebsite.com/SomeService/Soap.svc?xsd=xsd6" namespace="http://schemas.datacontract.org/2004/07/SomeOtherNamespace" /> 

Tout cela est bel et bon, mais le problème est l'ordre des années XSD est différent sur chaque serveur à charge équilibrée, même s'ils ont les mêmes bits. Cela signifie que le XSD à https://mywebsite.com/SomeService/Soap.svc?xsd=xsd0 est très différent sur chaque serveur, ce qui cause évidemment des problèmes pour ceux qui consomment le service. Je suis conscient qu'il existe des solutions de code pour aplatir le WSDL et y inclure tous les XSD. Cependant, existe-t-il une solution simple pour forcer les WSDL à correspondre? Après tout, ce sont les mêmes bits sur chaque machine.

+0

Seriez-vous en mesure de fournir un exemple plus concret (mais simplifié) avec les types et les wsdls générés en question? Un qui pourrait être utilisé pour reproduire cela sur les machines des lecteurs. – steinar

Répondre

2

Les XSD générés sont différents mais les messages sont identiques. Ce qui diffère, ce sont les préfixes d'espaces de noms et les commandes dans les XSD. Si vous ne voulez qu'une seule version du WSDL, je vous suggère de désactiver l'équilibrage de charge sur les URL? Wsdl et? Xsd. Néanmoins, l'approche ascendante (code vers wsdl) pour le webservice n'est certainement pas la meilleure pour l'environnement de production. Le WSDL est le contrat entre vous et vos clients, il ne doit donc pas être créé dynamiquement et doit être corrigé pour la version actuelle de votre application de service Web.

+0

Yup, c'est ce que nous avons fini par faire: simplement désactiver l'équilibrage de charge. En ce qui concerne le code-first vs. le contrat-first, c'est une bataille institutionnelle que je devrai sauver un autre jour. –