WCF 4: сбой активации без файлов в XP (IIS 5) с включенным портом SSL - PullRequest
2 голосов
/ 16 июня 2010

У меня есть служба, размещенная в IIS на XP через активацию без файлов. Служба запускается нормально, когда для IIS не включен SSL-порт, но когда включен SSL-порт, я получаю сообщение об ошибке:

System.ServiceModel.ServiceActivationException: служба '/SkillsPrototype.Web/services/Linkage.svc' не может быть активирована из-за исключения во время компиляции. Сообщение об исключении: Экземпляр привязки уже был связан для прослушивания URI 'http://rcollet.hsb -corp.hsb.com / SkillsPrototype.Web / Services / Linkage.svc '. Если две конечные точки хотят использовать один и тот же ListenUri, они также должны использовать один и тот же экземпляр объекта привязки. Две конфликтующие конечные точки были либо указаны в вызовах AddServiceEndpoint (), либо в файле конфигурации, либо в комбинации AddServiceEndpoint () и config. , ---> System.InvalidOperationException: экземпляр привязки уже был связан для прослушивания URI 'http://rcollet.hsb -corp.hsb.com / SkillsPrototype.Web / Services / Linkage.svc '. Если две конечные точки хотят использовать один и тот же ListenUri, они также должны использовать один и тот же экземпляр объекта привязки. Две конфликтующие конечные точки были либо указаны в вызовах AddServiceEndpoint (), либо в файле конфигурации, либо в комбинации AddServiceEndpoint () и config.

Моя конфигурация модели сервиса:

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

Когда вы просматриваете файл svclog, при включенном SSL возвращаются два базовых адреса: один для http и один для https. Я подозреваю, что это является частью проблемы, но я не уверен, как ее решить.

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

Я не могу опубликовать полный журнал обслуживания из-за ограничений на количество символов в сообщении.

1 Ответ

3 голосов
/ 17 июня 2010

Показано, что, потратив на это часы, я решил проблему вскоре после публикации.

Похоже, что проблема связана с использованием WebScriptServiceHostFactory. Вместо этого я создал служебную запись с атрибутом kind, и теперь она работает.

Вот исправленная конфигурация

  <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...