Comment consommer un webservice dans MVC?
Je suis super nouvelle pour MVC (en fait, c'est ma première affectation)
J'ai une bonne webservice en cours d'exécution, fonctionnelle, sur ma machine locale
http://www.codetrials.local/wcf/UserServices.svc?wsdl
et Dans mon application MVC, j'ai ajouté une référence de service, comme d'habitude, et puis dans mon Modèle.cs je suis en train d'essayer ceci:
using (CodeTrials.UserServicesClient _client = new UserServicesClient())
{
UserWebsite = _client.GetUserWebsite(username);
}
mais lorsque je tente de l'exécuter, j'ai toujours l'exception endpoint not found
. Je peux y accéder à partir de mon (autre) asp.net projet et il fonctionne très bien, même code et tout et tout. Après quelques recherches, j'ai trouvé cette réponse j'ai modifié mon code ci-dessus pour:
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://www.codetrials.local/wcf/UserServices.svc");
using (CodeTrials.UserServicesClient _client = new UserServicesClient(binding, address))
{
UserWebsite = _client.GetUserWebsite(username);
}
mais maintenant, je reçois une nouvelle exception: There was no endpoint listening at http://www.codetrials.local/wcf/UserServices.svc?wsdl that could accept the message
Donc je suis à bout de ressources.
J'ai trouvé une question similaire mais ce n'est pas ce que je suis à la recherche d'.
Pouvez-vous svp me guider vers le droit chemin?
que suis-je pas en train de faire?
doit-on passer la consommation de webservice de Modèle de Contrôleur?
Grâce.
MODIFIER - C'est mon fichier de config system.serviceModel
section. J'ai juste copier collé de la WCF client de test, l'outil gui sur le web.config car il n'a pas été généré par visual studio.
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IUserServices" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://www.codetrials.local/wcf/UserServices.svc/wcf/UserServices.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IUserServices"
contract="IUserServices" name="BasicHttpBinding_IUserServices" />
</client>
</system.serviceModel>
- Pourriez-vous poster votre configuration des ordinateurs d'extrémité dans le service web lui-même?
- Vous ne devriez pas avoir à faire ce genre de trucs dans le code si votre MVC application dispose d'un système adéquat.servicemodel web.entrée config. Pouvez-vous l'envoyer?
- ajouté, merci.
- ajouté, merci.
- Pourriez-vous poster le plein de trace de pile d'exception?
- votre adresse de point de terminaison a un doublon /wcf/UserServices.svc sur la fin - essayez de supprimer ce (bien que cela doit avoir été remplacé par votre codage en dur - ce qui vous devriez probablement supprimer). Ensuite, vérifiez votre adresse de point de terminaison du service - dans vos services d'application, web.config > système.serviceModel > services > service > point de terminaison. Pour tests locaux vous pouvez définir l'adresse="" pour écarter un problème.
- hmm. Qui a l'air bien. Êtes-vous sûr de son dans le droit web.config alors? VS devez créer automatiquement lorsque vous ajoutez le service de référence (pour moi au moins). Un piège est que l'application MVC a deux web.les fichiers de configuration, il y a une deuxième à l'intérieur de la Vue de dossier par défaut. Alors que d'autres, je ne suis pas vraiment sûr de ce qui se passe.
- vous êtes un épargnant de vie. Tout ce temps, j'ai essayé de modifier
web.config
et lorsque j'ai compilé, leweb.debug.config
était l'écraser et donc pas de point final. Maintenant, je l'ai changé directement dans le debug de config et il est tout beau. Vous pouvez poster votre commentaire est une réponse afin que je puisse l'accepter? Merci. - Fait, content d'avoir pu aider. 🙂
Vous devez vous connecter pour publier un commentaire.
La rediffusion de commentaires, car il s'est avéré être la réponse. 🙂 S'est avéré qu'web.debug.config était d'écraser le web.config dans ce cas.
Êtes-vous sûr de son dans le droit web.config alors? VS devez créer automatiquement lorsque vous ajoutez le service de référence (pour moi au moins). Un piège est que l'application MVC a deux web.les fichiers de configuration, il y a une deuxième à l'intérieur de la Vue de dossier par défaut. Alors que d'autres, je ne suis pas vraiment sûr de ce qui se passe.
Votre code indique que vous êtes en utilisant cet URL:
http://www.codetrials.local/wcf/UserServices.svc
pour accéder au point de terminaison de service, mais votre message d'exception dit que vous êtes réellement en utilisanthttp://www.codetrials.local/wcf/UserServices.svc?wsdl
à la place.Vérifier votre MVC application web.fichier de configuration pour un serviceModel élément. Si vous avez besoin de configurer la WCF client dans le code puis retirez l'élément complet du web.fichier de configuration qui peut être où la mauvaise URL de provenance. Si vous ne souhaitez configurer WCF à partir du web.fichier de config, puis retirez votre code actuel et utiliser les deux lignes suivantes pour créer le client et appeler le service:
où la chose comme suit l'article existe dans votre site web.config serviceModel élément:
Enfin, vous ne devriez pas envelopper la UserServicesClient instanciation dans une instruction d'utilisation en raison de la les raisons décrites dans ce post. WCF est une tricksty bête....
EDIT:
Basé sur la mise à jour avec votre config, votre problème peut être que le service URL:
http://www.codetrials.local/wcf/UserServices.svc/wcf/UserServices.svc
La
wcf/UserServices.svc
semble être dupliqué.wcf/UserServices.svc
est ajouté par le VS lui-même, je ne suis pas d'ajouter manuellement les et et quand la même chose est généré par la WCF Client, outil de test de l'interface graphique, il travaille avec la double fin... je sais pas trop!