Domanda

Ho bisogno di aiuto nella risoluzione di un problema che sto affrontando una con la comunicazione di un client desktop con un servizio WCF ospitato su IIS.
Quello che sto cercando di fare nel mio banco di prova:

  1. Server ospita un servizio WSDualHttpBinding
  2. client stabilisce una connessione (chiamate metodo Register) per questo fornendo la sua URI callback che contiene l'indirizzo IP del client
  3. Una volta stabilita la connessione, una pagina web viene lanciato dall'applicazione client. utente digita del testo nella casella di testo e clic su Invia. La pagina Web invia il testo a tutti i client desktop registrati.

Problema:
Nella fase 2, un PC può avere più indirizzi IP (adattatore Ethernet, adattatori di loopback ecc). Se durante la chiamata di registrazione, un IP in questa lista non viene inviato l'URL di callback che non può essere richiamato dal server (ad esempio loopback adattatore IP), un'eccezione di timeout viene generata. Dopo un paio di questi tentativi, il server non può accettare le chiamate da parte dei clienti più (se IP valido o altro). A volte “server troppo occupato” stata generata un'eccezione.

(non riesco a utilizzare il nome completo della macchina in uri richiamata a causa di DNS / WINS causando problemi di configurazione del server di non non risolvere il nome della macchina per l'indirizzo IP corretto).

Come riprodurre:
 un. Pubblicare il server su IIS. Da una macchina diversa con più indirizzi IP, eseguire il client. Il client genera eccezioni timeout e le uscite del programma dopo 3 tentativi  b. Un parametro nel app.config consente di scrivere l'indirizzo IP a destra (IP da utilizzare). Ora, se il programma viene lanciato, tutto funziona bene.
 c. Se rimuovere questo indirizzo IP sopra specificato in modo da utilizzare un IP non corretto, di nuovo stadio a accade. Eseguire i programmi di 2-3 volte in questa modalità.
 d. Apportare modifiche come al punto B ed eseguire il programma. A volte ho un'eccezione di timeout. Altre volte, il sito provengono in su. Tuttavia quando il testo viene inserito e inviato, che non arriva al cliente. (Il metodo di registro ha funzionato anche se il servizio web non ha ricevuto alcuna chiamata. Invio funzione ha esito negativo poiché non ci sono i clienti registrati sul servizio web.

Non sono sicuro perché esattamente questo accade e come affrontarla. Ecco la mia soluzione di Visual Studio - http://bit.ly/atKfOS

altamente apprezzare eventuali ingressi, i commenti. Ambiente: Server - Windows XP (IIS 5), Windows Server 2008 SP2 x64 (IIS 7), Cliente: Windows XP

Grazie GC

È stato utile?

Soluzione

Beh, credo che il problema principale è questo:. Quando il server tenta di richiamare al cliente e non riesce, il canale tra i due diventerà "Faulted", e reso inutile

Dopo un tale evento si verifica, si deve smaltire il proxy lato client, e ricrearlo - o con grazia gestire l'eccezione di timeout sul server (prenderlo, trasformarlo in un errore SOAP, log che - qualunque cosa - appena don' t lasciare che il .NET TimeoutException non filtrato passa al client, questo sarà colpa del canale).

Che cosa fate sul lato server quando tale TimeoutException succede? Fate attenzione a non bolla tale eccezione tutta la strada fino al canale ??

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top