2010-06-16 7 views
2

J'ai un service hébergé dans IIS sous XP via une activation sans fichier. Le service commence bien quand il n'y a pas de port SSL activé pour IIS mais quand le port SSL est activé, je reçois le message d'erreur:WCF 4: l'activation sans fichier échoue sous XP (IIS 5) sur lequel le port SSL est activé

System.ServiceModel.ServiceActivationException: Le service « /SkillsPrototype.Web/services/Linkage .svc 'ne peut pas être activé en raison d'une exception lors de la compilation. Le message d'exception est: Une instance de liaison a déjà été associée pour écouter l'URI 'http://rcollet.hsb-corp.hsb.com/SkillsPrototype.Web/Services/Linkage.svc'. Si deux points de terminaison souhaitent partager le même ListenUri, ils doivent également partager la même instance d'objet de liaison. Les deux points de terminaison en conflit ont été spécifiés dans les appels AddServiceEndpoint(), dans un fichier de configuration ou dans une combinaison de AddServiceEndpoint() et de config. . --- > System.InvalidOperationException: une instance de liaison a déjà été associée pour écouter l'URI 'http://rcollet.hsb-corp.hsb.com/SkillsPrototype.Web/Services/Linkage.svc'. Si deux points de terminaison souhaitent partager le même ListenUri, ils doivent également partager la même instance d'objet de liaison. Les deux points de terminaison en conflit ont été spécifiés dans les appels AddServiceEndpoint(), dans un fichier de configuration ou dans une combinaison de AddServiceEndpoint() et de config.

Ma configuration du modèle de service est

<system.serviceModel> 
    <diagnostics wmiProviderEnabled="true"> 
     <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/> 
    </diagnostics> 
    <standardEndpoints> 
     <webHttpEndpoint> 
     <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" /> 
     </webHttpEndpoint> 
    </standardEndpoints> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <webHttpBinding> 
     <binding> 
      <security mode="None"> 
      <transport clientCredentialType="None"/> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    <protocolMapping> 
    </protocolMapping> 
    <services> 
    </services> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="false"> 
     <serviceActivations> 
     <clear/> 
     <add factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" service="SkillsPrototype.ServiceModel.Linkage" relativeAddress="~/Services/Linkage.svc"/> 
     </serviceActivations> 
    </serviceHostingEnvironment> 
    </system.serviceModel> 

Quand vous regardez dans le fichier svclog, il deux adresses de base qui sont retournés lorsque SSL est activé, l'un pour http et un pour https. Je soupçonne que cela fait partie du problème, mais je ne suis pas sûr de savoir comment le résoudre.

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent"> 
    <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system"> 
    <EventID>524333</EventID> 
    <Type>3</Type> 
    <SubType Name="Information">0</SubType> 
    <Level>8</Level> 
    <TimeCreated SystemTime="2010-06-16T17:40:55.8168605Z" /> 
    <Source Name="System.ServiceModel" /> 
    <Correlation ActivityID="{95927f9a-fa90-46f4-af8b-721322a87aaa}" /> 
    <Execution ProcessName="aspnet_wp" ProcessID="1888" ThreadID="5" /> 
    <Channel/> 
    <Computer>RCOLLET</Computer> 
    </System> 
    <ApplicationData> 
    <TraceData> 
     <DataItem> 
     <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information"> 
      <TraceIdentifier>http://msdn.microsoft.com/en-US/library/System.ServiceModel.ServiceHostBaseAddresses.aspx</TraceIdentifier> 
      <Description>ServiceHost base addresses.</Description> 
      <AppDomain>/LM/w3svc/1/ROOT/SkillsPrototype.Web-1-129211836532542949</AppDomain> 
      <Source>System.ServiceModel.WebScriptServiceHost/49153359</Source> 
      <ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/CollectionTraceRecord"> 
      <BaseAddresses> 
       <Address>http://rcollet.hsb-corp.hsb.com/SkillsPrototype.Web/Services/Linkage.svc</Address> 
       <Address>https://rcollet.hsb-corp.hsb.com/SkillsPrototype.Web/Services/Linkage.svc</Address> 
      </BaseAddresses> 
      </ExtendedData> 
     </TraceRecord> 
     </DataItem> 
    </TraceData> 
    </ApplicationData> 
</E2ETraceEvent> 

Je ne peux pas publier le journal de service complet en raison des limites de caractères sur le message.

Répondre

3

Cela se chiffre après avoir passé des heures sur ce que je résous le problème peu après l'affichage.

Il semble que le problème soit lié à l'utilisation de WebScriptServiceHostFactory. Au lieu de cela, j'ai créé une entrée de service avec un attribut kind et maintenant cela fonctionne.

Voici la configuration corrigée

<system.serviceModel> 
    <diagnostics wmiProviderEnabled="true"> 
     <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/> 
    </diagnostics> 
    <standardEndpoints> 
     <webHttpEndpoint> 
     <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" /> 
     </webHttpEndpoint>  
    </standardEndpoints> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <webHttpBinding> 
     <!--Default settings for the webHttpBinding--> 
     <binding> 
      <security mode="None"> 
      <transport clientCredentialType="None"/> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    <protocolMapping> 
    </protocolMapping> 
    <services> 
     <service name="SkillsPrototype.ServiceModel.Linkage"> 
     <endpoint 
      kind="webScriptEndpoint" 
      contract="SkillsPrototype.ServiceModel.ILinkage"/> 
     </service> 
    </services> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="false"> 
     <serviceActivations> 
     <clear/> 
     <add service="SkillsPrototype.ServiceModel.Linkage" relativeAddress="~/Services/Linkage.svc"/> 
     </serviceActivations> 
    </serviceHostingEnvironment> 
    </system.serviceModel>