2010-07-29 4 views
0

Voici la configuration du projet.Authentification WCF et exception d'abandon de socket

J'ai un service WCF qui est hébergé sur une liaison net.tcp en mode tampon et ReliableSession activé.

La liaison est configurée pour utiliser la sécurité TransportWithMessageCredential. Le certificat est un certificat auto-signé que j'identifie en utilisant le Thumbprint. Le UserNameValidator est un validateur personnalisé qui, pour tester, n'échoue jamais (il n'échouait pas avant mais j'éliminais l'incertitude)

Le service et le client sont sur la même machine et ils ont tous deux accès au certificat.

Le problème:

Je reçois une douille exception Aborted lorsque vous essayez de consommer une méthode du service. Voici le code que j'utilise pour ouvrir une connexion au service. MonitorServiceCallbacks contient uniquement des méthodes vides pour répondre aux exigences de l'interface.

_instanceContext = new InstanceContext(new MonitorServiceCallbacks()); 
_serviceInterface = new MonitorCallbackServiceClient(_instanceContext); 

_serviceInterface.ClientCredentials.UserName.UserName = Environment.MachineName; 
_serviceInterface.ClientCredentials.UserName.Password = "myPassword"; 
_serviceInterface.Open(); 

Cela semble fonctionner très bien que la variable _serviceInterface.State est réglé sur State.Opened et le validateur personnalisée est appelée et retourne sans exception. Cependant, si j'essaie d'appeler une méthode à l'aide du proxy _serviceInterface, aucun code dans lequel je peux pénétrer n'est exécuté sur le service et le tracelog ne révèle aucune erreur sauf une exception SocketAborted qui se produit 1 minute après la réception de ce qui semble être le message pour la méthode.

Il n'y a pas d'InnerException.

J'ai essayé de google le problème mais les résultats ont tendance à dire "juste désactiver la sécurité et cela fonctionnera bien". Malheureusement, cela ne peut pas être fait.

Je suis extrêmement confus par ce problème et toute aide serait grandement appréciée.

Un grand merci,
Ehrys

+0

Essayez d'activer WCF traçage –

+0

Salut WCF Tracing est activée, mais comme je l'ai indiqué, ce n'est pas me donner des informations utiles. La première exception qu'il reçoit est l'exception SocketAborted. Le niveau de trace est défini sur Verbose, Suivi des activités, Propager l'activité – Ehrys

Répondre

0

C'était en fait une erreur de sérialisation.

L'objet que j'essayais d'envoyer au service hérité du contrat de données. Donc, j'essayais d'envoyer un cast vers le contrat de données au service.

WCF ne semble pas autoriser cela. J'aimerais remercier John Saunders de m'avoir rappelé que non seulement le service peut être activé. L'activation du traçage côté client m'aurait permis de gagner beaucoup de temps.

je tentais de faire ce qui suit:

_serviceInterface.Register((MyDataContract)MyParentObject, aVariable, anotherOne); 

Ce que je devais faire:

MyDataContract tempContract = MyParentObject.CreateMyDataContract(); 
_serviceInterface.Register(tempContract, aVariable, anotherOne); 
/* Note: MyParentObject.CreateMyDataContract() is my own method which creates an instance 
of the MyDataContract and copies the relevant information to it */