Service WCF ne fonctionne pas lors de l'accès via HTTPS et HTTP
J'ai installé un certificat SSL dans IIS.
Maintenant, quand je navigue dans mon domaine https://www.example.com/ le chargement de la page correctlty.
Mais quand j'essaie d'aborder un service web (qui normalement fonctionne parfaitement sur http) https: https://www.example.com/service.svc/newprofile/?id=8&ipaddress=124.162.13.109 j'obtiens:
The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
Requested URL: /service.svc/newprofile/
J'ai aussi vérifié ici
- Webservice sur SSL endpoint pas trouvé avec 404
- créer asp.net webservice pour SSL HTTPS
- Déplacé mon ASP.NET site web de IIS 8 sur windows server 2012... les services manquants: .svc fichiers sont visibles, mais leurs méthodes donne une erreur 404
Mais le changement de nom webHttpBinding
à basicHttpBinding
déclenche une erreur non pris en charge en combinaison avec jsonp.
Aussi le service de nom de l'élément dans le web.config correspond pleinement qualifié de la classe qui implémente mon contrat.
Voici mon site web.config
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true">
</binding>
<binding name="webHttpsBindingWithJsonP" crossDomainScriptAccessEnabled="true">
<security mode="Transport"></security>
</binding>
</webHttpBinding>
</bindings>
<client />
<services>
<service name="RestService.service">
<endpoint behaviorConfiguration="webHttp" binding="webHttpBinding" contract="RestService.Iservice" />
<endpoint address="/service.svc" binding="webHttpBinding" bindingConfiguration="webHttpBindingWithJsonP" contract="RestService.Iservice" />
<endpoint address="/service.svc" binding="webHttpBinding" bindingConfiguration="webHttpsBindingWithJsonP" contract="RestService.Iservice" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp />
</behavior>
<behavior name="webHttpBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
J'ai vérifié le fichier wsdl: http://www.example.com/service.svc?wsdl
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" name="service" targetNamespace="http://tempuri.org/">
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="http://www.example.com/service.svc?xsd=xsd0" namespace="http://tempuri.org/"/>
<xsd:import schemaLocation="http://www.example.com/service.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
<xsd:import schemaLocation="http://www.example.com/service.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/RestService"/>
<xsd:import schemaLocation="http://www.example.com/service.svc?xsd=xsd3" namespace="http://schemas.microsoft.com/Message"/>
<xsd:import schemaLocation="http://www.example.com/service.svc?xsd=xsd4" namespace="http://schemas.datacontract.org/2004/07/AjaxControlToolkit"/>
<xsd:import schemaLocation="http://www.example.com/service.svc?xsd=xsd5" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="Iservice_newProfile_InputMessage">
<wsdl:part name="parameters" element="tns:newProfile"/>
</wsdl:message>
Quand je vérifie sur https: https://www.example.com/service.svc?wsdl
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" name="service" targetNamespace="http://tempuri.org/">
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="https://www.example.com/service.svc?xsd=xsd0" namespace="http://tempuri.org/"/>
<xsd:import schemaLocation="https://www.example.com/service.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
<xsd:import schemaLocation="https://www.example.com/service.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/RestService"/>
<xsd:import schemaLocation="https://www.example.com/service.svc?xsd=xsd3" namespace="http://schemas.microsoft.com/Message"/>
<xsd:import schemaLocation="https://www.example.com/service.svc?xsd=xsd4" namespace="http://schemas.datacontract.org/2004/07/AjaxControlToolkit"/>
<xsd:import schemaLocation="https://www.example.com/service.svc?xsd=xsd5" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="Iservice_newProfile_InputMessage">
<wsdl:part name="parameters" element="tns:newProfile"/>
</wsdl:message>
Le service dans ce cas est défini comme:
<OperationContract()> _
<Web.WebInvoke(Method:="GET", ResponseFormat:=Web.WebMessageFormat.Json, BodyStyle:=Web.WebMessageBodyStyle.Bare, _
UriTemplate:="newprofile/?id={id}&ipaddress={ipaddress}")> _
Function newProfile(ByVal Id As String, Optional ByVal IPAddress As String = "") As service.Profile
Mon webservice
Namespace RestService
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> _
Public Class service
Implements Iservice
'my code
End Class
End Namespace
J'ai activé le suivi dans mon web.config ainsi, voici une partie du journal (DONC ne permet pas de poster tous):
<E2ETraceEvent
xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System
xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>262155</EventID>
<Type>3</Type>
<SubType Name="Error">0</SubType>
<Level>2</Level>
<TimeCreated SystemTime="2014-10-27T19:07:08.0773174Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{f7c83e1b-3e28-4e4f-8978-23f5073be422}" />
<Execution ProcessName="w3wp" ProcessID="1428" ThreadID="19" />
<Channel/>
<Computer>MYPC</Computer>
</System>
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord
xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Error">
<TraceIdentifier>http://msdn.microsoft.com/nl-NL/library/System.ServiceModel.Channels.HttpChannelMessageReceiveFailed.aspx</TraceIdentifier>
<Description>Failed to lookup a channel to receive an incoming message. Either the endpoint or the SOAP action was not found.</Description>
<AppDomain>/LM/W3SVC/1/ROOT-2-130589104148009222</AppDomain>
<Source>System.ServiceModel.Activation.HostedHttpTransportManager/33997547</Source>
<ExtendedData
xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/StringTraceRecord">
<IsRecycling>False</IsRecycling>
</ExtendedData>
</TraceRecord>
</DataItem>
</TraceData>
</ApplicationData>
</E2ETraceEvent>
<E2ETraceEvent
xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System
xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>131074</EventID>
<Type>3</Type>
<SubType Name="Error">0</SubType>
<Level>2</Level>
<TimeCreated SystemTime="2014-10-27T19:07:08.0803197Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" />
<Execution ProcessName="w3wp" ProcessID="1428" ThreadID="19" />
<Channel/>
<Computer>MYPC</Computer>
</System>
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord
xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Error">
<TraceIdentifier>http://msdn.microsoft.com/nl-NL/library/System.ServiceModel.Diagnostics.EventLog.aspx</TraceIdentifier>
<Description>Wrote to the EventLog.</Description>
<AppDomain>/LM/W3SVC/1/ROOT-2-130589104148009222</AppDomain>
<ExtendedData
xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/DictionaryTraceRecord">
<CategoryID.Name>EventLogCategory</CategoryID.Name>
<CategoryID.Value>5</CategoryID.Value>
<InstanceID.Name>EventId</InstanceID.Name>
<InstanceID.Value>3221356547</InstanceID.Value>
<Value0>System.ServiceModel.Activation.HostedHttpRequestAsyncResult/52951402</Value0>
<Value1>System.Web.HttpException (0x80004005): There was no channel actively listening at 'https://www.example.com/service.svc/newprofile/?id=8&amp;ipaddress=25.62.133.109'. This is often caused by an incorrect address URI. Ensure that the address to which the message is sent matches an address on which a service is listening. ---&gt; System.ServiceModel.EndpointNotFoundException: There w
Je veux que ce service soit disponible sur http et https.
J'ai aussi vérifié de mon site web.config et mondial.asax.vb, mais je ne fais pas quelque chose de spécifiquement pour les requêtes https, pas dans IIS...ce que ce problème peut-il être?
Mise à JOUR
Ok, enlevé quelques points de terminaison et maintenant essayer de comprendre ce qu'il faut fournir en vertu de la valeur de l'adresse de point de terminaison.
Avec cette config ci-dessous, j'obtiens l'erreur:
The endpoint at 'http://<pcname>/service.svc' does not have a Binding with the None MessageVersion. 'System.ServiceModel.Description.WebHttpBehavior' is only intended for use with WebHttpBinding or similar bindings.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true">
<security mode="Transport"></security>
</binding>
</webHttpBinding>
<wsHttpBinding>
<binding name="wsHttpBinding" >
<security mode="Transport">
</security>
</binding>
</wsHttpBinding>
</bindings>
<client />
<services>
<service name="RestService.service">
<endpoint behaviorConfiguration="webHttp" binding="webHttpBinding" contract="RestService.Iservice" />
<endpoint behaviorConfiguration="webHttp" binding="wsHttpBinding" contract="RestService.Iservice" />
<!--
<endpoint address="/service.svc" binding="webHttpBinding" bindingConfiguration="webHttpBindingWithJsonP" contract="RestService.Iservice" />
-->
<!--
<endpoint behaviorConfiguration="webHttp" binding="webHttpBinding" contract="RestService.Iservice" />
<endpoint address="/service.svc" binding="webHttpBinding" bindingConfiguration="webHttpBindingWithJsonP" contract="RestService.Iservice" />
-->
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp />
</behavior>
<behavior name="webHttpBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Mais alors, tous mes services ne seront pas disponibles sur http droit? Je veux que les services soient disponibles sur http ET https.
C'est probablement ce qui ne vous aide pas immédiatement, mais je vous garantissons que la réponse se trouve dans amazon.com/Programming-WCF-Services-Mastering-AppFabric/dp/...
Si vous voulez, alors vous pouvez toujours garder les anciennes point de terminaison comme il est et d'en ajouter de nouveaux avec webHttpsBinding pour https. regarder lien stackoverflow.com/questions/26248759/...
J'ai essayé d'ajouter
<webHttpsBinding></webHttpsBinding>
à mon bindings
nœud, mais c'est pas reconnu dans mon web.config. Pourriez-vous nous donner un exemple de ce qui et où?
OriginalL'auteur Flo | 2014-10-25
Vous devez vous connecter pour publier un commentaire.
@Flo, je suis Enfin en mesure de le faire fonctionner. J'ai mis à jour
<endpoint behaviorConfiguration ..
et définir<service behaviorConfiguration=..
, et cela a fonctionné, je veux dire quand vous frappez à la foishttp
ethttps
version dewww.example.com/service.svc/newprofile/?id=8&ipaddress=124.162.13.109
, elle, vous obtiendrez de bons résultats. Voici lasystem.serviceModel
partie deweb.config
. Veuillez essayer ceci, laissez-moi savoir, si vous n'êtes toujours pas capable de le faire fonctionner.Encore une question: il semble maintenant que lorsque je suis connecté sur mon site je ne peux pas appeler ces services plus. J'obtiens une erreur:
Cross domain javascript callback is not supported in authenticated services.
. Aucune idée de ce que cela pourrait être? Veuillez noter: je dois avoir ces services à la disposition de la croix-domaine.J'ai répondu à ce type de question que beaucoup de temps, s'il vous plaît trouver l'un d'eux ici stackoverflow.com/questions/25889599/...
Ok merci encore, je vais y jeter un oeil. Mais avant que je commence la mise en œuvre de tout ce qui pourrait vous dire si votre solution prend en charge les éléments suivants: 1. accéder à mon webservices sur http et https? 2. appeler mon webservices de la croix de domaine? 3. appeler mon webservices de la croix de domaine, même lorsqu'il est authentifié (par l'intermédiaire des Formulaires d'Authentification)? Merci!
1. Soutenir le http, le https est juste la config de la base, donc qui sera certainement le travail. 2. Pour traiter une requête POST, vous devez suivre le lien que j'avais donné, je ne sais pas pourquoi requête GET ne fonctionne pas. 3. Je ne pense pas qu'il serait question avec la SCRO.
OriginalL'auteur Arindam Nayak
Ce genre de services web peuvent être très sensibles au fait que vous êtes en utilisant le protocole HTTP ou HTTPS pour y accéder.
Essayez d'utiliser cette option pour activer le SSL pour les services WCF dans le web.config:
J'ai juste eu un problème similaire, voir ma réponse à cette question pour plus d'info: Déplacé mon ASP.NET site web de IIS 8 sur windows server 2012... les services manquants: .svc fichiers sont visibles, mais leurs méthodes donne une erreur 404
Merci à vous, est venu à travers ce post, et il a résolu mon problème :).
L'OP m'a aidé avec le WSDL ne pas montrer que https, mais vous avez résolu mon problème de méthodes de jeter 404. Merci!!!!!
Merci @MGOwen, pas exacally le même problème que l'OP mais résolu le mien: serverfault.com/questions/776390/...
OriginalL'auteur MGOwen