Служба WCF: SecurityContextSecurityToken с context-id = (идентификатор генерации ключа =) не зарегистрирован - PullRequest
1 голос
/ 30 октября 2009

enter code here Привет всем,

У меня есть простое приложение службы Windows, которое подключается к службе WCF. Служба Windows развернута на нашем сервере приложений для разработки, а служба WCF - на нашем веб-сервере DEV. Служба настроена для работы под соответствующей учетной записью службы (у нас есть несколько других служб, которые также взаимодействуют со службами WCF, расположенными на тех же серверах, работающих под той же учетной записью).

Моя проблема заключается в том, что, когда служба пытается подключиться к службе WCF, она выдает следующее сообщение об ошибке (блестящее из журналов трассировки службы):

SecurityContextSecurityToken с context-id = urn: uuid: a02a1879-3297-4dee-8035-68eb30ed4195 (идентификатор генерации ключа =) не зарегистрирован.

Служба работает нормально при запуске с моего локального компьютера (затем я запускаю службу, используя свою учетную запись домена), и да, служба работала нормально вчера после ее развертывания. Но с сегодняшнего дня это неожиданно не происходит :(

Конфигурация службы WCF настроена следующим образом:

<system.serviceModel>
<diagnostics>
  <messageLogging logMalformedMessages="true" logMessagesAtTransportLevel="true" />
</diagnostics>
<services>
  <service name="Calm.Leads.ImportService.LeadImportService" 
  behaviorConfiguration="Calm.Leads.ImportService.LeadImportService">
    <!-- Service Endpoints -->
    <endpoint address="" binding="wsHttpBinding" contract="Calm.Leads.ImportService.ILeadImportService">
      <!-- 
          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"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="Calm.Leads.ImportService.LeadImportService">
      <!-- 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>
<bindings>
  <wsHttpBinding>
    <binding name="WSHttpBinding_ILeadImportService" closeTimeout="00:01:00" openTimeout="00:01:00" 
    receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" 
    hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
      <security mode="Message">
        <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
        <message clientCredentialType="Windows" negotiateServiceCredential="true" 
        algorithmSuite="Default" establishSecurityContext="true" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<client>
  <endpoint address="http://calm.intranet.dev/LeadsImportService/LeadImportService.svc" 
  binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ILeadImportService" 
  contract="LeadImportService.ILeadImportService" name="WSHttpBinding_ILeadImportService">
    <identity>
      <dns value="localhost" />
    </identity>
  </endpoint>
</client>

И, наконец, след исключения выглядит следующим образом:

SecurityContextSecurityToken с context-id = urn: uuid: a02a1879-3297-4dee-8035-68eb30ed4195 (идентификатор генерации ключа =) не зарегистрирован. в System.ServiceModel.Security.WSSecureConversation.SecurityContextTokenEntry.ReadTokenCore (читатель XmlDictionaryReader, SecurityTokenResolver tokenResolver) в System.ServiceModel.Security.WSSecurityTokenSerializer.ReadTokenCore (читатель XmlReader, SecurityTokenResolver tokenResolver) в System.IdentityModel.Selectors.SecurityTokenSerializer.ReadToken (читатель XmlReader, SecurityTokenResolver tokenResolver) at System.ServiceModel.Security.ReceiveSecurityHeader.ReadToken (читатель XmlReader, SecurityTokenResolver tokenResolver, IList 1 allowedTokenAuthenticators, SecurityTokenAuthenticator&amp;amp; usedTokenAuthenticator) at System.ServiceModel.Security.ReceiveSecurityHeader.ReadToken(XmlDictionaryReader reader, Int32 position, Byte[] decryptedBuffer, SecurityToken encryptionToken, String idInEncryptedForm, TimeSpan timeout) at System.ServiceModel.Security.ReceiveSecurityHeader.ExecuteFullPass(XmlDictionaryReader reader) at System.ServiceModel.Security.StrictModeSecurityHeaderElementInferenceEngine.ExecuteProcessingPasses(ReceiveSecurityHeader securityHeader, XmlDictionaryReader reader) at System.ServiceModel.Security.ReceiveSecurityHeader.Process(TimeSpan timeout) at System.ServiceModel.Security.MessageSecurityProtocol.ProcessSecurityHeader(ReceiveSecurityHeader securityHeader, Message&amp;amp; message, SecurityToken requiredSigningToken, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates) at System.ServiceModel.Security.SymmetricSecurityProtocol.VerifyIncomingMessageCore(Message&amp;amp; message, String actor, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates) at System.ServiceModel.Security.MessageSecurityProtocol.VerifyIncomingMessage(Message&amp;amp; message, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates) at System.ServiceModel.Channels.SecurityChannelListener 1.ServerSecurityChannel 1.VerifyIncomingMessage(Message&amp;amp; message, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationState) at System.ServiceModel.Channels.SecurityChannelListener 1.SecurityReplyChannel.ProcessReceivedRequest (RequestConxtTimeSpectetete тайм-аут) at System.ServiceModel.Channels.SecurityChannelListener 1.ReceiveRequestAndVerifySecurityAsyncResult.ProcessInnerItem(RequestContext innerItem, TimeSpan timeout) at System.ServiceModel.Channels.SecurityChannelListener 1.ReceiveItemAndVerifySecurityAsyncResult 2.OnInnerReceiveDone() at System.ServiceModel.Channels.SecurityChannelListener 1.ReceiveItemAndVerifySecurityAsyncResult 2.InnerTryReceiveCompletedCallback(IAsyncResult result) at System.ServiceModel.Diagnostics.Utility.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) at System.ServiceModel.AsyncResult.Complete(Boolean completedSynchronously) at System.ServiceModel.Channels.InputQueue 1.AsyncQueueReader.Set (элемент элемента) в System.ServiceModel.Channels.InputQueue 1.Dispatch() at System.ServiceModel.Channels.InputQueue 1.OnDispatchCallback (состояние объекта) в System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.Invoke2 () в System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.OnSecurityContextCallback (Object o) в System.Security.SecurityContext.Run (SecurityContext securityContext, обратный вызов ContextCallback, состояние объекта) в System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.Invoke () в System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.ProcessCallbacks () в System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.CompletionCallback (состояние объекта) в System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.ScheduledOverlapped.IOCallback (код ошибки UInt32, код UInt32 numBytes, NativeOverlapped * nativeOverlapped) в System.ServiceModel.Diagnostics.Utility.IOCompletionThunk.UnhandledExceptionFrame (ошибка UInt32, UInt32 bytesRead, NativeOverlapped * NativeOverlapped) в System.Threading._IOCompletionCallback.PerformIOCompletionCallback (код ошибки UInt32, numBytes UInt32, NativeOverlapped * pOVERLAP)

И веб-серверы, и серверы приложений являются компьютерами под управлением Windows Server 2003 с пакетом обновления 1 (SP1), а веб-сервер работает под управлением IIS 6.

У кого-нибудь была похожая проблема? Кто-нибудь знает, что может быть причиной?

1 Ответ

0 голосов
/ 30 октября 2009

Нашел следующее, что может помочь. Кажется, это нерешенная ошибка в IIS. Подозреваю, что это было исправлено в 2008 (v7), но не в 2003 (v6), поскольку это было только в движении с 2004 года. Маркер безопасности, похоже, теряется, если вы выполняете более одного рабочего процесса. Вот проблема потери контекста с NLB, а вот ссылка на липкие сессии и NLB, если вы используете его, что может помочь. Sticky Sessions в NLB в win 2k3 IIS6

SecurityContextSecurityToken не зарегистрирован

Надеюсь, это поможет. scope_creep

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...