Service Web WCF erreur: “point de terminaison de Service de liaison non à l'aide du protocole HTTP”?
J'ai un simple service WCF qui a bien fonctionné alors que je l'ai testé sur ma machine de dev.
Maintenant, j'ai déménagé le service web sur un serveur web, et je suis l'exécution du service (en mode debug) à http://mydomain.com:8005. L'ouverture d'un navigateur web à l'URL indique le service attendu de la page, et si je mets un point d'arrêt sur le serveur à l'intérieur de l'interface, je vais appeler, il touche le point d'arrêt et renvoie les données attendues... mais sur le côté client, il revient avec l'erreur suivante:
Une erreur s'est produite lors de la réception de la réponse HTTP à http://mydomain.com:8005/. Cela pourrait être dû à la point de terminaison de service de liaison de ne pas utiliser le protocole HTTP. Cela pourrait aussi être dû à une requête HTTP contexte été interrompue par le serveur (éventuellement à cause de l'arrêt). Voir les journaux du serveur pour plus de détails.
Plus d'indices: l'interface de signature est:
IEnumerable<MyClass> GetThings(out string errMsg);
où MyClass
est défini comme Serializable, et les définitions sont identiques entre le client et le serveur.
Toutes les idées que les commutateurs secrets j'ai besoin de flip?
WCF doit également avoir des les classes de béton pour transmettre les données autour d' (puisque tout doit être XML-sérialisable et doit être capable d'être exprimé dans les schémas XML - les interfaces ne sont pas bien adaptés). Je crois qu'il ne sera pas en mesure de passer à une
IEnumerable<T>
- essayez d'utiliser un List<T>
ou un type de béton à la place. Un peu de chance?auto-hébergé, marqué comme
[Serializable]
et [DataContract]
; tous les membres marqué comme [DataMember]
.La classe de béton commentaire est la réponse. Merci de le proposer comme une réponse pour moi de marquer correcte. Merci!
Fait - merci! Heureux, j'ai été en mesure d'aider
OriginalL'auteur Shaul Behr | 2011-03-15
Vous devez vous connecter pour publier un commentaire.
WCF doit également avoir classes concrètes de transmettre les données autour (puisque tout doit être XML-sérialisable et doit être capable d'être exprimé dans les schémas XML - les interfaces ne sont pas bien adaptés).
Je crois qu'il ne sera pas en mesure de passer à une
IEnumerable<T>
- essayez d'utiliser unList<T>
(ou unT[]
array) ou un type de béton à la place.Un peu de chance?
Sauver la vie d'une réponse!!! Je n'aurais jamais penser à cette possibilité. Je vous remercie beaucoup.
OriginalL'auteur marc_s
J'ai eu le même problème parce que je revenais d'une incroyablement grande quantité de l'enregistrement à partir du serveur, j'ai ajouté la ligne suivante à mon wcf fichier de config et ça a fonctionné.
OriginalL'auteur zxnet
Ne définissent pas MyClass comme Sérialisable. Marquer comme [DataContract] et ses propriétés en tant que [DataMember].
Si vous ne pouvez pas, eh bien... je crois que j'ai vu que la question de traîner ici.
MODIFIER
Alors qu'il n'y a rien en soi de blocage [Serializable] à cause de votre sérialisation peut-être processus plus qu'il peut traiter.
EDIT 2
marc_s commentaire a raison
[Serializable]
et[DataContract]
; tous les membres marqué comme[DataMember]
. Ne[Serializable]
faire de dégâts, ou est-ce inutile?+1 pour noter qu'
[Serializable]
est inutile.OriginalL'auteur Vincent Vancalbergh
La fin de la réponse de la partie, mais j'ai eu le même message d'erreur.
S'avère, vous ne pouvez pas utiliser les classes abstraites pour le contrat de données des membres. J'ai eu à utiliser les éléments suivants:
Afin de permettre la WCF pour sérialiser quelque chose comme
OriginalL'auteur Sarah Bailey
Mise à jour de votre Entité si toutes les modifications apportées dans vos tableaux précédents et n'a pas de mise à jour de votre entité aussi cette erreur se produit
OriginalL'auteur sibi elango
Je viens de quitter ce ici au cas où quelqu'un en a besoin. Je suis venu à travers avec la même erreur. J'ai été d'appeler mon service qui a un argument de type
Dictionary<int, string>
et l'une des paires clé/valeur a la chaîne de valeur null.J'ai changé le code pour s'assurer il n'y avait pas de valeurs null et il a travaillé
OriginalL'auteur Alberto Sadoc
Juste en face exactement le même problème, mais il a été causé par le protocole de sécurité de type codé en dur à
TLS 1.2
alors que le service a été déployé à 2008 server R2 sans (et 32 bits pour démarrer, ce qui signifie non-extensible jusqu'à R2).C'est une hypothèse très improbable pour quelqu'un d'autre, mais pensé que je le mentionne.
Si quelqu'un est dans la même situation et a une ligne de code comme ça, vous savez pourquoi vous obtenez l'erreur maintenant:
OriginalL'auteur ajeh
Que j'ai rencontré le même problème. C'était la question de l'adresse de port de EndpointAddress. Dans Visual studio port adresse de votre fichier (par exemple, Service1.svc) et de l'adresse de port de votre wcf projet doit être le même qui vous donne en EndpointAddress. Permettez-moi de vous décrire cette solution en détail.
Il y a deux étapes pour vérifier les adresses de port.
Dans votre Projet WCF clic droit sur votre fichier de Service (par exemple, Service1.svc) -> sélectionnez Afficher dans le navigateur maintenant dans votre navigateur, vous devez l'url http://localhost:61122/Service1.svc alors maintenant, notez votre adresse de port comme un 61122
Droit de la souris sur votre wcf projet -> sélectionnez Propriétés -> aller à la Onglet Web -> Maintenant, dans section Serveurs -> sélectionnez Utilisation Serveur de Développement Visual Studio -> sélectionnez Port Spécifique et de donner l'adresse du port qui nous ont antérieure à trouver de nos Service1.svc service. C'est (61122).
Plus tôt que j'ai différente de l'adresse du port. Après l'indication de l'adresse du port correctement, ce qui j'ai donné dans EndpointAddress, mon problème a été résolu.
J'espère que ce pourrait être résolu votre problème.
OriginalL'auteur Dilip0165