2010-04-16 10 views
0

J'ai un ensemble de services WCF existants hébergés dans une application .NET 3.0. Ils utilisent les liaisons WSHttp et aucune sécurité.Compatibilité ascendante WCF 3.5 à 3.0 avec les services de rappel

Je dois me connecter à ceux-ci à partir d'un client .NET 3.5. Cela semble fonctionner correctement pour les services unidirectionnels, mais j'ai également des services de rappel (avec CallbackContract et SessionMode = Required, en utilisant WSDualHttpBinding); ceux-ci ne parviennent pas à se connecter avec un délai d'attente quelque part dans le code ReliableSession.

Le côté service ne peut pas être modifié (il s'agit d'un problème de version historique). Puis-je modifier quelque chose du côté client pour que cela fonctionne? (Je peux me connecter avec un client .NET 3.0 très bien, mais je préfère ne pas être forcé d'essayer cette voie.)

The open operation did not complete within the allotted timeout of 00:00:09.9410000. 
The time allotted to this operation may have been a portion of a longer timeout. 
Server stack trace: 
    at System.ServiceModel.Channels.ReliableRequestor.ThrowTimeoutException() 
    at System.ServiceModel.Channels.ReliableRequestor.Request(TimeSpan timeout) 
    at System.ServiceModel.Channels.ClientReliableSession.Open(TimeSpan timeout) 
    at System.ServiceModel.Channels.ClientReliableDuplexSessionChannel.OnOpen(TimeSpan timeout) 
    at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout) 
    at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 
+0

Je suis tenté de penser que 3,0 contre 3,5 n'est pas le vrai problème (peu aurait dû changer), même si je peux me tromper. – Brian

+0

C'est ce que je pensais d'abord aussi; les services non-callback se connectent bien. Je me demandais si quelque chose à propos de la configuration par défaut pour les services de rappel a changé entre 3.0 et 3.5 qui pourrait expliquer cela. – Miral

Répondre

1

Ok, désolé pour le bruit. Il s'avère que le problème était dû au code client généré; À l'époque, le service .NET 3.5 fonctionnait sur ma machine locale et le service .NET 3.0 s'exécutait sur une machine distante. Ils ont des espaces de noms différents, et il semble que VS prenait les espaces de noms de service local même si je lui ai spécifiquement dit de se connecter à l'adresse IP distante. Après avoir régénéré le code client avec le serveur local qui ne fonctionnait pas, cela a fonctionné correctement.

+0

Et maintenant, je viens juste de le faire à nouveau, mais * cette fois-ci, c'était dû au port de rappel du client déjà utilisé par une autre application. Ils ne rendent vraiment pas ce truc facile à utiliser. :( – Miral