WCF ne pouvez pas trouver le point de terminaison de problème de configuration
J'ai un webservice avec WCF je suis en essais sur ma machine locale, c'est de me donner un headscratcher.
Mon service est configurée comme suit:
<system.serviceModel>
<services>
<service name="GHMDatroseIntegration.GHMDatroseWCFService.DatroseService"
behaviorConfiguration="DatroseServiceBehavior">
<endpoint
address="mex"
binding="basicHttpBinding"
contract="GHMDatroseIntegration.GHMDatroseWCFService.IDatroseService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DatroseServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Mon client est configurée comme suit:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDatroseService"
closeTimeout="00:02:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:02:00"
allowCookies="false" bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard"
maxBufferSize="524288" maxBufferPoolSize="524288"
maxReceivedMessageSize="524288"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas
maxDepth="32" maxStringContentLength="524288"
maxArrayLength="524288" maxBytesPerRead="524288"
maxNameTableCharCount="524288" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint name="BasicHttpBinding_IDatroseService"
address="http://localhost/DatroseWCFService/DatroseService.svc"
behaviorConfiguration="DatroseServiceBehavior"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IDatroseService"
contract="DatroseWCFService.IDatroseService" />
</client>
<behaviors>
<endpointBehaviors>
<behavior name="DatroseServiceBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
L'erreur que je reçois est:
Il n'y a pas de point de terminaison de l'écoute à http://localhost/DatroseWCFService/DatroseService.svc qui pourrait
acceptez le message. Cela est souvent causé par une erreur d'adresse ou
SAVON d'action. Voir InnerException, le cas échéant, pour plus de détails.
... et pourtant, si je naviguez jusqu'à l'emplacement, j'obtiens le service de l'écran, de sorte qu'il semble être mis en place correctement.
Je suis sûr que cela a à faire avec ma configuration, les paramètres, mais je ne peux pas comprendre ce qu'ils sont censés ressembler. Un peu d'aide serait appréciée ici.
Mise à JOUR whups j'ai mis le message d'erreur incorrect. C'est corrigé maintenant.
Mise à JOUR 2 par ce que je crois a été suggéré dans ces réponses, j'ai changé mon server config :
<system.serviceModel>
<services>
<service name="GHMDatroseIntegration.GHMDatroseWCFService.DatroseService"
behaviorConfiguration="DatroseServiceBehavior">
<endpoint
address="/svc"
binding="basicHttpBinding"
contract="GHMDatroseIntegration.GHMDatroseWCFService.IDatroseService" />
<endpoint
address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DatroseServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
et mon client configuration:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDatroseService"
closeTimeout="00:02:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:02:00"
allowCookies="false" bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard"
maxBufferSize="524288" maxBufferPoolSize="524288"
maxReceivedMessageSize="524288"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas
maxDepth="32" maxStringContentLength="524288" maxArrayLength="524288"
maxBytesPerRead="524288" maxNameTableCharCount="524288" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint name="BasicHttpBinding_IDatroseService"
address="http://localhost/DatroseWCFService/DatroseService.svc/svc"
behaviorConfiguration="DatroseServiceBehavior"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IDatroseService"
contract="DatroseWCFService.IDatroseService" />
</client>
<behaviors>
<endpointBehaviors>
<behavior name="DatroseServiceBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
et lorsque j'exécute ce que je suis maintenant obtenir un 400 (bad request) erreur. Je ne suis pas sûr si ce est un pas en avant ou un pas en arrière. J'ai créé un nouveau problème, ou j'ai effacé mon chemin vers le prochain problème?
Mise à JOUR 3
Sur niao conseils, j'ai changé pour la configuration du serveur:
<system.serviceModel>
<services>
<service name="GHMDatroseIntegration.GHMDatroseWCFService.DatroseService" behaviorConfiguration="DatroseServiceBehavior">
<endpoint contract="GHMDatroseIntegration.GHMDatroseWCFService.IDatroseService" binding="basicHttpBinding" address="http://localhost/DatroseWCFService/DatroseService.svc"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DatroseServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
...cependant, lorsque je l'ai consulté à cette adresse, j'ai reçu un jaune d'écran de la mort:
Erreur de serveur dans '/DatroseWCFService' Application.
Lorsque le système.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled'
est définie sur true dans la configuration, les paramètres qui sont nécessaires pour préciser
une adresse relative. Si vous spécifiez une relative écouter URI sur le
d'extrémité, puis l'adresse peut être absolu. Pour résoudre ce problème,
spécifier un uri relatif pour le point de terminaison
'http://localhost/DatroseWCFService/DatroseService.svc'.
...donc, avec cela, j'ai essayé de faire un chemin d'accès relatif de la sorte:
<endpoint
address="localhost/DatroseWCFService/DatroseService.svc"
binding="basicHttpBinding"
contract="GHMDatroseIntegration.GHMDatroseWCFService.IDatroseService" />
... mais après la publication, j'obtiens le message d'erreur 404. Le point de terminaison de client est configuré en tant que tel:
<endpoint name="BasicHttpBinding_IDatroseService"
address="http://localhost/DatroseWCFService/DatroseService.svc"
behaviorConfiguration="DatroseServiceBehavior"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IDatroseService"
contract="DatroseWCFService.IDatroseService" />
Mise à JOUR 4
Par marc_s conseils, j'ai supprimé la liaison de config du client, de sorte que ma config ressemble à ceci:
<system.serviceModel>
<client>
<endpoint address="http://localhost/DatroseWCFService/DatroseService.svc" behaviorConfiguration="DatroseServiceBehavior"
binding="basicHttpBinding"
contract="DatroseWCFService.IDatroseService" name="BasicHttpBinding_IDatroseService" />
</client>
<behaviors>
<endpointBehaviors>
<behavior name="DatroseServiceBehavior">
<dataContractSerializer maxItemsInObjectGraph="10000000"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
et mon serveur de configuration ressemble à ceci:
<system.serviceModel>
<services>
<service name="GHMDatroseIntegration.GHMDatroseWCFService.DatroseService" behaviorConfiguration="DatroseServiceBehavior">
<endpoint contract="GHMDatroseIntegration.GHMDatroseWCFService.IDatroseService" binding="basicHttpBinding" address=""/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DatroseServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" httpsHelpPageEnabled="true" httpHelpPageEnabled="true"/>
<dataContractSerializer maxItemsInObjectGraph="10000000"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Je n'ai plus l'erreur 404.
Cependant, je reçois 400 (ProtocolException, Bad Request) sans édifiant de l'information de ce qu'il est arrivé, ni pourquoi c'est mauvais. Je m'attends j'ai progressé au-delà de l'extrémité d'émission, en une marque de nouveau une annulation de la configuration du service de l'enfer.
Mise à JOUR 5
Par demande, le "squelette" de mon service (je suppose que l'interface?):
[ServiceContract]
public interface IDatroseService
{
[OperationContract]
bool SubmitPayableTransaction(List<InvoiceItem> invoices);
[OperationContract]
Dictionary<string, bool> ValidateAccounts(List<string> accounts);
[OperationContract]
Dictionary<string, int> GetVendor1099Types(List<string> vendors);
[OperationContract]
Dictionary<string, string> GetPaymentTerms(List<string> vendors);
}
Je suis tombé sur cette question. Un élément utile est d'utiliser des violoneux. Elle pourrait demander à une crossdomainpolicy.xml (le nom peut être sightly différents) qui vont le faire échouer. Aussi, j'ai mal configuré ma connexion de base de données qui a jeté une erreur et, par conséquent, le service n'était pas à l'écoute. Essayez de regarder pour ces types d'articles pour voir si cela est la cause. Votre configuration du service pourrait être correct, mais quelque chose peut-être tort.
J'ai un point de terminaison définis (voir la première config)... tu veux dire définir une autre?
cela ne fonctionne pas;
When 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' is set to true in configuration, the endpoints are required to specify a relative address. If you are specifying a relative listen URI on the endpoint, then the address can be absolute. To fix this problem, specify a relative uri for endpoint 'http://localhost/DatroseWCFService/DatroseService.svc'.
définissez les options suivantes dans votre fichier de configuration de serveur: <serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
OriginalL'auteur Jeremy Holovacs | 2012-02-06
Vous devez vous connecter pour publier un commentaire.
Donc je suppose que votre service est hébergé à l'intérieur d'IIS, non??
De sorte que le répertoire virtuel où votre
*.svc
vit essentiellement définit votre adresse de service - est-ce donc l'adresse correcte?Aussi: vous avez "relative" de l'adresse de
mex
sur le point de terminaison de service(je crois que c'est une très mauvaise idée - MEX stands pour l'Échange de Métadonnées, et je voudrais pas utiliser cette adresse pour un point de terminaison de service! Il viole le Principe de moindre Surprise - si le point de terminaison est appelé
MEX
, j'attends qu'il ÊTRE un échange de métadonnées de l'effet n'est pas régulier point de terminaison de service...)De toute façon, avec que régulier, votre adresse, votre service complète à l'adresse devient:
Que si vous appelez votre service sur cette adresse - faites-vous une réponse??
Mise à jour: pas sûr de savoir comment vous êtes en train de tester cela. C'est un web service SOAP - vous verrez la "landing page" (la page "aide") pour le service dans votre navigateur, mais pour tester le service en lui-même, vous devez utiliser un SAVON capables outil de test (comme le Client Test WCF ou SoapUI) - vous ne pouvez pas tester le web service SOAP par simple navigation à son adresse web .
(ok, donc votre test en invoquant le service à partir d'une application de test qui devrait certainement travailler!)
Mise à jour #2: puisque vous êtes l'hôte de ce dans IIS (à droite?), votre adresse de service est essentiellement défini par le répertoire virtuel où votre *.svc fichier de vie. Donc ma prochaine tentative serait: il suffit de laisser que l'adresse de votre adresse de service.
Changer votre côté service config:
et votre côté client config:
??
La prochaine tentative serait d'utiliser le côté client de la config sans
bindingConfiguration=
valeur puisque c'est ce que vous êtes en train de faire sur le serveur, trop juste absolument bare-bonesbasicHttpBinding
sans tout modifications, est - ce que le travail??le service web répond sur
http://localhost/DatroseWCFService/DatroseService.svc
. Ce qui devrait à mon adresse? Vide? quelque chose d'autre? Je dois avouer que j'étais juste à la suite de "comment-faire" guides que j'ai trouvé sur internet, c'est juste timide d'être grec pour moi.Veuillez voir ma mise à jour.
oui (actuellement) je suis le développement du service local. Évidemment, mon ordinateur portable ne sera pas sa destination finale, mais pour le dépannage de tout local.
J'ai écrit ce qui suit dans les commentaires de votre poste: vous y êtes presque. Modifier votre adresse de point de terminaison sur le serveur: localhost/DatroseWCFService/DatroseService.svc (au lieu de /svc). Spécifiez la même adresse de point de terminaison sur le côté client.Aussi quitter le mex adresse de point de terminaison sur le serveur comme il est maintenant. Essayez cela et à mon avis, vous devriez être bien
OriginalL'auteur marc_s