8
votes

Problème de service WCF - Le protocole 'http' n'est pas pris en charge. Comment résoudre?

Je suis après la mise en place d'un service WCF sur ma boîte de développement, mais je reçois une erreur lors de votre accès. J'ai défini le Service up selon ce guide . Il est écrit dans VS2008 / C # / .NET 3.5 STROND> et ma boîte de développement est Vista SP2 forte> avec IIS 7 forte>. Pour le moment, le service n'est rien de plus que la structure par défaut depuis que je suis littéralement après avoir testé une connexion.

J'ai vérifié ce qui doit être installé et je suis assez sûr que j'ai tout activé, tir de l'écran ci-dessous montre les options de courant: p>

Windows IIS Options p>

Message d'erreur complet sur Accès à http: // localhost: 8000 / service.svc strong> est la suivante : P>

<?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>


5 commentaires

Vous avez installé l'hôte de service comme Port 8000?


Oui (suivant le guide que j'ai lié). J'ai aussi essayé le port 80. Pas de joie.


S'il vous plaît poster le web.config, je soupçonne que c'est un problème de configuration.


Essayez ceci: dans IIS Configuration Manager, vous devez cliquer avec le bouton droit de la souris sur le service que vous avez appelé Choisissez "Gérer le site Web" puis passer à l'avance. Ajouter http dans les protocoles activés.


Vous êtes un génie, sautez cela dans une réponse afin que je puisse vous donner les points de rep. Je ne suis pas bien sur IIS 7.0, je n'ai jamais trouvé cela.


3 Réponses :


6
votes

Réponse pour moi était la suivante (fournie par Lazarus dans les commentaires, mais ne revient pas à poster comme une réponse):

  1. Furée Gestionnaire d'informations Internet (IIS) .
  2. a ouvert le dossier sites et sélectionné le site en question .
  3. à droite cliquée sur , puis sélectionné Gérer le site Web , puis Paramètres avancés ...
  4. sur la popup résultante, j'ai entré http dans les protocoles activés rangées.
  5. a fermé la popup et redémarré le site, et c'était lui. Corrigé!

0 commentaires

1
votes

J'ai trouvé que c'était presque toujours un problème avec la façon dont le point de terminaison , liaisons et / ou le comportement est configuré.

Pour la plupart, si votre site Web dans IIS n'a pas de liaison HTTP, assurez-vous d'assurer explicitement définir explicitement le httpget httpgetenabled = 'False' dans la configuration Configuration / System.servicemodel / Comportements / ServiceBehaviors / Comportement / ServiceMetaData Configuration correspondant à votre service WCF. Le chemin ci-dessus obtient votre fichier Web ou app.config.

En outre, si vous avez un point de terminaison qui a «http: //» dans l'adresse, supprimez-le. WCF accorde une attention particulière à ces choses et jettera le même message d'erreur ambigu. Il y a un tout labyrinthe des erreurs de configurations qui produisent les mêmes messages d'erreur. (Je déteste ça à propos de WCF.) IE QUE C'ÉTAIT SPÉCIFIQUE COMME: "Hé Dumm comme #! Vous avez un HTTP dans l'une de vos adresses de terminaison, mais IIS n'a pas de liaison HTTP!" ; P au moins de cette façon je ne poursuivrai pas ma queue.

De même, je n'utilise jamais les points finaux MEX car ils sont plus de problèmes, alors ils valent la peine. Au lieu de cela, utilisez le httpshelppageurl et httpshelppageenabled dans la configuration Configuration / system.servicemodel / comportements / comportements / comportement / comportement / remplissage (code> configuration (en supposant que " en utilisant https ).


0 commentaires

1
votes

Réponse pour moi était de désactiver puis de l'activer à nouveau métadonnées sur http .

  1. Furée Gestionnaire d'informations Internet (IIS) .
  2. a ouvert le dossier sites et sélectionné le site en question .
  3. à droite cliquée sur , puis sélectionné gérer les services wcf et wf , puis configure ...
  4. sur l'onglet général , j'ai décoché Activer les métadonnées sur http (oui, il a déjà été vérifié).
  5. cliqué sur Appliquer (et a confirmé l'avertissement de l'application de recyclage).
  6. cochés Activer les métadonnées sur http .
  7. cliqué sur Appliquer (et a confirmé l'avertissement de l'application de recyclage), et c'était lui. Corrigé!

    ... ou peut-être qu'un recyclage d'Appool serait suffisant.


0 commentaires