Errore di bilanciamento del carico con servizio WCF - Bilanciamento carico di rete
-
19-08-2019 - |
Domanda
AGGIORNAMENTO 3:
Ho creato un progetto di test di Visual Studio 2008 e ho provato a creare un riferimento al servizio al riferimento al servizio WCF del sito condiviso e ho ricevuto il seguente errore:
Si è verificato un errore durante il download " http: //apps.mydomain/MyService.svc ". La richiesta non è riuscita con lo stato HTTP 400: Richiesta non valida. I metadati contengono a riferimento che non può essere risolto: " http: //apps.mydomain/MyService.svc ". Tipo di contenuto application / soap + xml; charset = utf-8 non è stato supportato da servizio http: //apps.mydomain/MyService.svc '. I collegamenti client e di servizio potrebbero essere non corrispondenti. Il server remoto è tornato un errore: (415) Impossibile elaborare il messaggio perché il tipo di contenuto 'Application / soap + xml; charset = utf-8' non era il tipo previsto 'text / xml; charset = utf-8 '.. Se il servizio è definito nella soluzione corrente, provare costruire la soluzione e aggiungere il riferimento di servizio di nuovo.
AGGIORNAMENTO 2:
@Nick - Ho provato il tuo suggerimento di impostare esplicitamente l'indirizzo di ciascun endpoint con il percorso completo di ciascun server e ottengo comunque lo stesso risultato.
Inoltre, quando provo a impostare l'attributo hearUri con l'URL del sito condiviso, ricevo un errore 400 richiesta errata invece di un errore 404.
UPDATE
Dopo alcune ricerche aggiuntive, ci sono stati alcuni conflitti di impostazione della configurazione IIS tra http: //apps1.mydomain e http: //apps2.mydomain ed è stato in grado di superare " Applicazione server non disponibile " errore.
Ora sto riscontrando un errore 404 quando ho provato a navigare nel sito condiviso ( http: //apps.mydomain ), ma sono in grado di accedere ai http: //apps1.mydomain e http: //apps2.mydomain riferimento al servizio.
Problema originale
I miei amici usano Microsoft NLB per bilanciare il traffico tra i nostri Server IIS. Di recente ho distribuito un servizio WCF su ciascun server IIS 6 Windows Server 2003 Standard Edition SP1. Ho ricevuto il seguente errore quando ho provato a cercare il nome di dominio condiviso usando IE 7:
Applicazione server non disponibile applicazione Web che stai tentando di l'accesso su questo server web è attualmente non disponibile. Premi il & Quot; Aggiorna & Quot; pulsante nel browser Web per riprovare la tua richiesta.
Nota dell'amministratore: un messaggio di errore dettagliare la causa di questo specifico richiesta non riuscita può essere trovata in registro eventi dell'applicazione del Web server. Si prega di rivedere questa voce di registro per scoprire cosa ha causato questo errore verificarsi.
Il consumatore farà riferimento al http: //apps.mydomain per utilizzare il servizio ma il dominio virtuale è mappato su http: //apps1.mydomain o http: //apps2.mydomain . Se cerco il servizio su ciascun server, non ricevo questo errore.
Il servizio sta attualmente utilizzando un basicHttpBinding anonimo.
Qualcun altro ha riscontrato questo problema?
Cronologia
Prima che iniziasse a verificarsi questo errore, ho ricevuto il seguente errore quando ho passato a tutti e tre i nomi di dominio ( http: //apps.mydomain , http: //apps1.mydomain , http: //apps2.mydomain ):
Questa raccolta contiene già un indirizzo con schema http. Ci può essere al massimo un indirizzo per schema in questa raccolta.
Ho usato la classe ServiceHostFactory per personalizzare il mio file .svc per specificare una factory di servizio personalizzata. Quindi creo la nostra fabbrica personalizzata ereditando da ServiceHostFactory e sostituendo come richiesto.
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" %>
Soluzione
Dopo alcuni esperimenti con diverse configurazioni per il mio servizio WCF e utilizzo di applicazioni. Ho creato un riferimento di servizio a uno dei riferimenti di servizio di lavoro ( http: //apps1.mydomain o http: //apps2.mydomain ) nell'applicazione che consuma. Quindi ho modificato il riferimento dell'endpoint nella configurazione del client in modo che punti all'indirizzo WCF del sito condiviso ( http: //apps.mydomain ) e sono stato in grado di consumare e utilizzare il servizio.
Altri suggerimenti
Ho già avuto un problema con WCF e bilanciamento del carico in cui i server avevano più schede di rete con indirizzi IP diversi e WCF avrebbe semplicemente visualizzato il primo indirizzo IP trovato. Abbiamo dovuto impostare esplicitamente l'indirizzo IP sulla definizione del servizio di ciascun server in modo che WCF si legasse a quello giusto.