Ich habe ein SSL-Zertifikat in IIS installiert.WCF-Dienst funktioniert nicht beim Zugriff über HTTPS und HTTP
Wenn ich nun zu meiner Domain https://www.example.com/ navigiere, wird die Seite korrekt geladen. Aber wenn ich versuche, einen Web-Service zu nähern (die in der Regel perfekt über http arbeitet) über https: https://www.example.com/service.svc/newprofile/?id=8&ipaddress=124.162.13.109 ich:
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/
ich auch
- Webservice over SSL endpoint not found with 404
- create asp.net webservice for SSL HTTPS
- hier geprüft Moved my ASP.NET website to IIS 8 on windows server 2012... services missing: .svc files are viewable, but their methods give a 404
Aber das Umbenennen webHttpBinding
zu basicHttpBinding
löst einen nicht unterstützten Fehler in Kombination mit Jsonp aus. Auch der Name des Dienstelements in der Datei web.config stimmt mit dem vollständig qualifizierten Namen der Klasse überein, die meinen Vertrag implementiert.
Hier ist meine 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>
ich die WSDL-Datei geprüft: 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>
Wenn ich überprüfen, über 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>
Der Service in diesem Fall definiert ist, wie:
<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
Mein webservice
Namespace RestService
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> _
Public Class service
Implements Iservice
'my code
End Class
End Namespace
ich aktivierter als auch in meinem web.config Tracing, hier ist Teil des log (SO nicht erlaubt, alles zu schreiben):
<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
I möchte, dass dieser Dienst sowohl über http als auch über https verfügbar ist.
Ich habe auch meine web.config und global.asax.vb überprüft, aber ich mache nichts speziell auf https Anfragen, auch nicht in IIS ... was kann dieses Problem sein?
UPDATE
Ok, entfernt einige Endpunkte und nun versuchen, herauszufinden, was unter der Adresse Wert des Endpunkts zu liefern. Mit dieser Konfiguration unten erhalte ich die Fehlermeldung: 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>
Möglicherweise müssen Sie die Bindung an webHttpsBinding für die Kommunikation über HTTPS-Kanal ändern. –
Aber dann werden alle meine Dienste nicht über HTTP verfügbar sein, oder? Ich möchte, dass die Dienste sowohl auf http als auch auf https verfügbar sind. – Flo
Dies hilft Ihnen wahrscheinlich nicht sofort, aber ich garantiere Ihnen die Antwort ist in http://www.amazon.com/Programming-WCF-Services-Mastering-AppFabric/dp/0596805489 –