Frage Problem mit dem WCF-Dienst - Das Protokoll 'http' wird nicht unterstützt. Wie löst man?


Ich bin nach dem Einrichten eines WCF-Dienstes auf meinem Dev-Box, aber ich bekomme einen Fehler beim Zugriff darauf. Ich habe das eingestellt Service gemäß dieser Anleitung. Es ist in geschrieben VS2008 / C # / .NET 3.5 und meine Dev Box ist Vista SP2 mit IIS 7. Im Moment ist der Dienst nichts mehr als die Standardstruktur, da ich buchstäblich eine Verbindung dazu getestet habe.

Ich habe überprüft, was installiert werden muss, und ich bin mir ziemlich sicher, dass alles aktiviert ist. Der Screenshot unten zeigt die aktuellen Optionen:

Windows IIS Options

Vollständige Fehlermeldung beim Zugriff http: // localhost: 8000 / Service.svc ist wie folgt:

Server Error in '/' Application.
--------------------------------------------------------------------------------

The protocol 'http' is not supported. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: The protocol 'http' is not supported.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[InvalidOperationException: The protocol 'http' is not supported.]
   System.ServiceModel.AsyncResult.End(IAsyncResult result) +11536522
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +194
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +176
   System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +278
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75


--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.4016; ASP.NET Version:2.0.50727.4016 

Irgendwelche Vorschläge zum Debuggen / Beheben des Fehlers würden dankbar empfangen werden. Das googlen des Fehlers gibt sehr wenig Hilfe. Ich habe wahrscheinlich etwas ganz offensichtlich übersehen!

Bearbeiten - web.config wie gewünscht (Entschuldigung für die Länge):

<?xml version="1.0"?>
<!--
    Note: As an alternative to hand editing this file you can use the 
    web admin tool to configure settings for your application. Use
    the Website->Asp.Net Configuration option in Visual Studio.
    A full list of settings and comments can be found in 
    machine.config.comments usually located in 
    \Windows\Microsoft.Net\Framework\v2.x\Config 
-->
<configuration>
    <configSections>
        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                    <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
                    <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                    <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                    <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                </sectionGroup>
            </sectionGroup>
        </sectionGroup>
    </configSections>
    <appSettings/>
    <connectionStrings/>
    <system.web>
        <!--
            Set compilation debug="true" to insert debugging 
            symbols into the compiled page. Because this 
            affects performance, set this value to true only 
            during development.
        -->
        <compilation debug="true">
            <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            </assemblies>
        </compilation>
        <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
        -->
        <authentication mode="Windows"/>
        <!--
            The <customErrors> section enables configuration 
            of what to do if/when an unhandled error occurs 
            during the execution of a request. Specifically, 
            it enables developers to configure html error pages 
            to be displayed in place of a error stack trace.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
        <pages>
            <controls>
                <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </controls>
        </pages>
        <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        </httpHandlers>
        <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </httpModules>
    </system.web>
    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
            <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="OptionInfer" value="true"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>
    <system.web.extensions>
        <scripting>
            <webServices>
                <!--
              Uncomment this section to enable the authentication service. Include 
              requireSSL="true" if appropriate. 

          <authenticationService enabled="true" requireSSL = "true|false"/>
          -->
                <!--
              Uncomment these lines to enable the profile service, and to choose the 
              profile properties that can be retrieved and modified in ASP.NET AJAX 
              applications.

           <profileService enabled="true"
                           readAccessProperties="propertyname1,propertyname2"
                           writeAccessProperties="propertyname1,propertyname2" />
          -->
                <!--
              Uncomment this section to enable the role service.

          <roleService enabled="true"/>
          -->
            </webServices>
            <!--
        <scriptResourceHandler enableCompression="true" enableCaching="true" />
        -->
        </scripting>
    </system.web.extensions>
    <!--
        The system.webServer section is required for running ASP.NET AJAX under Internet
        Information Services 7.0.  It is not necessary for previous version of IIS.
    -->
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
            <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
        <handlers>
            <remove name="WebServiceHandlerFactory-Integrated"/>
            <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </handlers>
    </system.webServer>
    <system.serviceModel>
        <services>
            <service name="Service" behaviorConfiguration="ServiceBehavior">
                <!-- Service Endpoints -->
                <endpoint address="" binding="wsHttpBinding" contract="IService">
                    <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
                    <identity>
                        <dns value="localhost"/>
                    </identity>
                </endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/" />
          </baseAddresses>
        </host>
      </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <!-- 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="false"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

Bearbeiten 2 - Ich habe den Abschnitt zum Erstellen eines Delphi-Win32-Clients entfernt, da Delphi 2007 SOAP 1.2 nicht unterstützt. Dies wird vom WCF-Dienst verwendet. Delphi 2007 unterstützt nur SOAP 1.0 ... Also wird der Client jetzt eine C # WinForms App sein.


6
2017-07-22 13:52


Ursprung


Antworten:


Antwort für mich war die folgende (von Lazarus in den Kommentaren zur Verfügung gestellt, ist aber nicht als Antwort zurück zu Posten):

  1. Aufgebrannt Internetinformationsdienste (IIS) -Manager.
  2. Eröffnet die Standortordner und hat die betreffende Seite ausgewählt.
  3. Rechts geklickt es, dann ausgewählt Website verwalten und dann Erweiterte Einstellungen...
  4. Auf dem resultierenden Popup trat ich ein http in dem Aktivierte Protokolle Reihe.
  5. Habe das Popup geschlossen und die Site neu gestartet, und das war es. Fest!

4
2017-07-23 20:20



Ich habe festgestellt, dass es fast immer ein Problem mit der Art und Weise ist endpoint, bindingsund / oder die behavior ist konfiguriert.

Wenn Ihre Website in IIS keine HTTP-Bindung aufweist, stellen Sie sicher, dass Sie http: // httpGetEnabled = 'false' in den meisten Fällen explizit festlegen configuration/system.serviceModel/behaviors/serviceBehaviors/behavior/serviceMetadata Konfiguration entsprechend Ihrem WCF-Dienst. Der obige Pfad bezieht sich natürlich auf Ihre Web- oder app.config-Datei.

Wenn Sie einen Endpunkt mit der Adresse "http: //" in der Adresse haben, entfernen Sie ihn. WCF beachtet diese Dinge und wird dasselbe werfen mehrdeutig Fehlermeldung. Da ist ein Ganzes Matze von Fehlkonfigurationen, die die gleichen Fehlermeldungen erzeugen. (Ich hasse das über WCF.) Ich, die es spezifischer war wie: "Hey Dumm wie #! Sie haben ein HTTP in einer Ihrer Endpunkt-Adressen, aber IIS hat keine HTTP-Bindung!" Auf diese Weise werde ich meinen Schwanz nicht verfolgen.

Ebenso benutze ich nie die mex Endpunkte als sie mehr Mühe sind als sie es wert sind. Verwenden Sie stattdessen die httpsHelpPageUrl und httpsHelpPageEnabled Attribute in der configuration/system.serviceModel/behaviors/serviceBehaviors/behavior/serviceDebug Konfigurationselement (vorausgesetzt, Sie verwenden HTTPS).


1
2017-07-11 06:08



Antwort für mich war das Deaktivieren und dann wieder aktivieren Metadaten über HTTP.

  1. Aufgebrannt Internetinformationsdienste (IIS) -Manager.
  2. Eröffnet die Standortordner und hat die betreffende Seite ausgewählt.
  3. Rechts geklickt es, dann ausgewählt WCF- und WF-Dienste verwalten und dann Konfigurieren...
  4. Auf der Allgemeines Tab, ich habe deaktiviert Aktivieren Sie Metadaten über HTTP (Ja, es wurde bereits überprüft).
  5. Angeklickt Sich bewerben (und bestätigte die Recycling-Anwendung Warnung).
  6. Überprüft Aktivieren Sie Metadaten über HTTP.
  7. Angeklickt Sich bewerben (und bestätigte die Recycling-Anwendung Warnung), und das war es. Fest!

... oder vielleicht würde ein AppPool Recycling ausreichen.


0
2017-12-16 16:14