Service WCF retourne 404 sur https mais pas http
Je suis la migration d'un service existant à partir de l'adresse HTTP (Dev/UAT), HTTPS (de Production), et je vais avoir des problèmes avec la configuration. Ici, c'est le système.serviceModel section de mon site web.config:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
<services>
<service name="MyService">
<endpoint name="MyEndpoint" address="" binding="wsHttpBinding"
bindingConfiguration="secureBinding" contract="IMyService" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="secureBinding">
<security mode="Transport"></security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
J'ai essayé en utilisant à la fois basicHttpBinding
et wsHttpBinding
, avec les mêmes résultats:
- Je peux appeler le service de mon client SOAP en utilisant
http://server.domain.com/MyService.svc
- Je peux frapper le service à partir d'un navigateur à l'aide de
https://server.domain.com/MyService.svc
- Je ne peux pas appeler le service de mon client SOAP en utilisant
https://server.domain.com/MyService.svc
- l'appel toujours des erreurs avec404: not found
.
Mon site en https est certifié à l'aide d'un certificat émis par une autorité de certification sur le domaine de l'entreprise, et j'ai vérifié que j'ai que CA certificat installé dans Trusted Root Certification Authorities
sur le système à partir de laquelle je suis en train de faire les appels.
Pertinentes du code de client:
Service service = new Service();
service.Url = "http://server.domain.com/MyService.svc";
//service.Url = "https://server.domain.com/MyService.svc";
service.WebMethodCall();
MODIFIER
Voici la demande des parties du WSDL:
<wsdl:types/>
<wsdl:portType name="IMyService"/>
<wsdl:binding name="BasicHttpBinding_IMyService" type="tns:IMyService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
</wsdl:binding>
<wsdl:service name="MyService">
<wsdl:port name="BasicHttpBinding_IMyService"
binding="tns:BasicHttpBinding_IMyService">
<soap:address location="http://server.domain.com/MyService.svc"/>
</wsdl:port>
</wsdl:service>
MODIFIER
Plus d'informations:
Lorsque je change la serviceMetadata élément pour avoir httpGetEnabled="false"
et httpsGetEnabled="true"
l' .svc page montre moi le lien suivant:
https://boxname.domain.com/MyService.svc?wsdl
plutôt que de l'attendre
https://server.domain.com/MyService.svc?wsdl
Je vais ajouter une note sur le WSDL dans un edit
C'est normal, car votre serviceMetadata permet de httpGet et pas httpsGet. Aussi, vous ne pouvez pas obtenir une référence de service parce que vous n'avez pas exposer mex point de terminaison. L'important est le contenu de WSDL lorsque vous y accédez via HTTP - en particulier la dernière partie décrivant le service et les ports.
OriginalL'auteur arootbeer | 2010-10-06
Vous devez vous connecter pour publier un commentaire.
Vérifiez que votre service de nom de l'élément dans le web.config correspond pleinement qualifié de la classe qui implémente votre contrat.
OriginalL'auteur Johann Blais
Dans votre WSDL vous voyez que votre service n'expose pas sur le port HTTPS, mais seulement sur HTTP. En outre, vous pouvez également voir que votre service utilise BasicHttpBinding (voir le nom du port et de liaison nom). Cela signifie que la configuration de votre service n'est pas utilisé du tout. Vérifiez que le nom de l'élément de service est le même que le nom de votre .svc balisage. Elle doit être définie notamment les espaces de noms.
Service
attribut de laServiceHost
directive dans le .svc fichier, ou si je change lename
attribut de laservice
élément dans le web.config, j'ai immédiatement obtenir un jaune d'écran qui dit que le nommé service ne peut pas être trouvé. Est-il quelque chose de mal avec monendpoint
déclaration?En fait, la modification de aucun les parties de la
endpoint
les causes de la rupture. C'est évidemment de l'analyse du web.fichier de configuration; est-il vraiment de ne pas l'utiliser?OriginalL'auteur Ladislav Mrnka
HTTP et HTTPS sont servis à partir de différents serveurs virtuels. Êtes-vous sûr que votre service est correctement installé dans les deux?
http://server.domain.com
ethttps://server.domain.com
.Ah, ok. C'est bizarre. Est-ce que courir Fiddler ou quelque chose d'autre pour capturer le trafic de rendement quelque chose d'intéressant? (Ce qui ne le serveur d'accès dans les journaux?)
Fiddler montre que la demande est allé à travers, mais il ne peut pas me montrer quelque chose d'intéressant à cause du chiffrement. Où puis-je voir les registres de trafic pour IIS?
OriginalL'auteur Yuliy
Grâce à Johann Blais pour la réponse, j'ai trouvé que vous devez inclure le nom pleinement qualifié de la classe qui définit le contrat de service.
Par exemple, si votre service est
Le correspondant de définition de service de votre site web.config serait
OriginalL'auteur kaffeemeister