Erreur d'équilibrage de la charge avec le service WCF - NLB
-
19-08-2019 - |
Question
UPDATE 3:
J'ai créé un projet de test Visual Studio 2008 et essayé de créer une référence de service à une référence de service WCF de site partagé et j'ai reçu l'erreur suivante:
Une erreur s'est produite lors du téléchargement. " http: //apps.mydomain/MyService.svc ". La demande a échoué avec le statut HTTP 400: mauvaise demande. Les métadonnées contiennent un référence qui ne peut pas être résolue: " http: //apps.mydomain/MyService.svc ". Type de contenu application / soap + xml; charset = utf-8 n'était pas supporté par un service http: //apps.mydomain/MyService.svc '. Les liaisons client et service peuvent être mal assorti. Le serveur distant est revenu une erreur: (415) Impossible de traiter le message parce que le type de contenu 'application / soap + xml; jeu de caractères = utf-8 ' n'était pas le type attendu 'text / xml; charset = utf-8 '.. Si le service est défini dans la solution actuelle, essayez la construction de la solution et l'ajout de la référence de service à nouveau.
UPDATE 2:
@Nick - J'ai essayé de suggérer de définir explicitement l'adresse de chaque terminal avec le chemin complet de chaque serveur et j'obtiens toujours le même résultat.
De plus, lorsque j'essaie de définir l'attribut listenUri avec l'URL du site partagé, j'obtiens une erreur de requête incorrecte 400, au lieu d'une erreur 404.
MISE À JOUR
Après quelques recherches supplémentaires, il y a eu des conflits de paramètres de configuration IIS entre http: //apps1.mydomain et http: //apps2.mydomain et a réussi à dépasser le " application serveur indisponible " Erreur.
Je reçois maintenant une erreur 404 lorsque j'ai tenté de naviguer sur le site partagé ( http: //apps.mydomain ), mais je peux accéder au http: //apps1.mydomain et à http: //apps2.mydomain référence de service.
Problème d'origine
Ma société utilise Microsoft NLB pour équilibrer le trafic entre nos Serveurs IIS. J'ai récemment déployé un service WCF sur chaque serveur IIS 6 Windows Server 2003 Édition Standard SP1. J'ai reçu l'erreur suivante lorsque j'ai essayé d'accéder au nom de domaine partagé avec IE 7:
Application serveur non disponible Le application Web que vous essayez de l'accès sur ce serveur Web est actuellement indisponible. Veuillez cliquer sur le bouton & Quot; Refresh & Quot; bouton dans votre navigateur Web pour réessayer votre demande.
Note de l'administrateur: Un message d'erreur détaillant la cause de cette spécifique échec de la demande peut être trouvé dans le journal des événements d'application du Web serveur. Veuillez vérifier cette entrée de journal pour découvrir ce qui a causé cette erreur se produire.
Le consommateur indiquera le http: //apps.mydomain pour utiliser le service, mais le domaine virtuel est mappé sur http: //apps1.mydomain ou http: //apps2.mydomain . Si je navigue jusqu'au service sur chaque serveur, je ne reçois pas cette erreur.
Le service utilise actuellement un lien anonyme de type BasicHttpBinding.
Quelqu'un d'autre a-t-il rencontré ce problème?
Historique
Avant que cette erreur ne se produise, j’ai reçu l’erreur suivante lorsque je vous ai présenté les trois noms de domaine ( http: //apps.mydomain , http: //apps1.mydomain , http: //apps2.mydomain ):
Cette collection contient déjà un adresse avec schéma http. Il peut être au plus une adresse par schéma dans cette collection.
J'ai utilisé la classe ServiceHostFactory . personnaliser mon fichier .svc pour spécifier une fabrique de services personnalisée. Ensuite, je crée notre usine personnalisée en héritant de ServiceHostFactory et en effectuant les remplacements requis.
public class MyFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new ServiceHost(serviceType, baseAddresses[0]);
}
}
<%@ ServiceHost Language="C#" Factory="MyFactory" Debug="true" Service="MyService" CodeBehind="~/App_Code/MyService.cs" %>
La solution
Après quelques expériences avec différentes configurations pour mon service WCF et une application consommatrice. J'ai créé une référence de service à l'une des références de service actives ( http: //apps1.mydomain ou http: //apps2.mydomain ) dans l'application consommatrice. Ensuite, j'ai modifié la référence de l'ordinateur d'extrémité dans la configuration du client pour pointer vers l'adresse WCF du site partagé ( http: //apps.mydomain ). ) et j’ai pu consommer et utiliser le service.
Autres conseils
J'ai déjà eu un problème avec WCF et l'équilibrage de charge où les serveurs avaient plusieurs cartes réseau avec des adresses IP différentes et où WCF capturait simplement la première adresse IP trouvée. Nous devions définir explicitement l'adresse IP dans la définition de service de chaque serveur pour que WCF soit lié à la bonne.