Подтвердить что ты не робот

WCF: сертификат службы не предоставляется. Укажите сертификат службы в ServiceCredentials

Я пытаюсь создать службу WCF, которая использует MembershipProvider для аутентификации. Поскольку это внутренняя служба, я в настоящее время не заинтересован в применении безопасности транспортного уровня (HTTPS) , и я хочу (пока) сделать это без сертификата. Кроме того, это осложнит развертывание службы, и я хочу сделать это в более поздний момент времени. Я построил базовую конфигурацию (даже без настройки MembershipProvider, но WCF продолжает бросать мне следующее исключение:

Сертификат службы не указан. Укажите сертификат службы в ServiceCredentials.

Здесь моя конфигурация:

<system.serviceModel>
  <bindings>
    <ws2007HttpBinding>
      <binding name="Service1WS2007HttpBindingConfig">
        <security mode="Message">
          <transport clientCredentialType="None" />
          <message clientCredentialType="UserName" />
        </security>
      </binding>
    </ws2007HttpBinding>
  </bindings>
  <services>
    <service name="WcfService1.Service1">
      <endpoint address="http://localhost:9800/Service1.svc"
        binding="ws2007HttpBinding"
        bindingConfiguration="Service1WS2007HttpBindingConfig"
        contract="WcfService1.IService1" />
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="">
        <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
        <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="false">
    <serviceActivations>
      <add relativeAddress="Service1.svc" service="WcfService1.Service1" />
    </serviceActivations>
  </serviceHostingEnvironment>
</system.serviceModel>

Stacktrace исключения:

[InvalidOperationException: сертификат службы не указан. Укажите сертификат службы в ServiceCredentials. ]
System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateServerX509TokenProvider() +12382737 System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateLocalSecurityTokenProvider(RecipientServiceModelSecurityTokenRequirement recipientRequirement) +63
System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateSecurityTokenProvider(SecurityTokenRequirement требование) +48
System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateTlsnegoServerX509TokenProvider (RecipientServiceModelSecurityTokenRequirement recipientRequirement) +191
System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateTlsnegoSecurityTokenAuthenticator(RecipientServiceModelSecurityTokenRequirement recipientRequirement, Boolean requireClientCertificate, SecurityTokenResolver & sctResolver) +683
System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateSecurityTokenAuthenticator(SecurityTokenRequirement tokenRequirement, SecurityTokenResolver & outOfBandTokenResolver) +12383208 System.ServiceModel.Security.SessionRenewSecurityTokenManager.CreateSecurityTokenAuthenticator(SecurityTokenRequirement tokenRequirement, SecurityTokenResolver & outOfBandTokenResolver) +81
System.ServiceModel.Security.SymmetricSecurityProtocolFactory.OnOpen(TimeSpan таймаут) +181
System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan таймаут) +21
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan таймаут) +318
System.ServiceModel.Security.SecurityListenerSettingsLifetimeManager.Open(TimeSpan тайм-аут) +94
System.ServiceModel.Channels.SecurityChannelListener`1.OnOpen(TimeSpan таймаут) +240
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan таймаут) +318
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan тайм-аут) +72

[InvalidOperationException: ChannelDispatcher в 'http://localhost: 9800/Service1.svc' с контрактом (-ами) "IssueAndRenewSession" не может открыть свой IChannelListener.]
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan таймаут) +118
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan таймаут) +318 System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan таймаут) +111
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan таймаут) +318
System.ServiceModel.Security.SecuritySessionSecurityTokenAuthenticator.OnOpen(TimeSpan таймаут) +131
System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan таймаут) +21
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan таймаут) +318
System.ServiceModel.Security.CommunicationObjectSecurityTokenAuthenticator.Open(TimeSpan тайм-аут) +20
System.ServiceModel.Security.SecuritySessionServerSettings.OnOpen(TimeSpan таймаут) +792
System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan таймаут) +21
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan таймаут) +318
System.ServiceModel.Security.SecurityListenerSettingsLifetimeManager.Open(TimeSpan таймаут) +148
System.ServiceModel.Channels.SecurityChannelListener`1.OnOpen(TimeSpan таймаут) +240
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan таймаут) +318
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan тайм-аут) +72

[InvalidOperationException: ChannelDispatcher в 'http://localhost: 9800/Service1.svc' с контрактом '' IService1 '' является не удалось открыть свой IChannelListener.]
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan таймаут) +118
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan таймаут) +318 System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan таймаут) +111
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan таймаут) +318
System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +206
System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +651

[ServiceActivationException: услуга '/Service1.svc' не может быть активируется из-за исключения во время компиляции. Исключение сообщение: ChannelDispatcher at 'http://localhost: 9800/Service1.svc' с контрактом '' IService1 '' является не удалось открыть свой IChannelListener..]
System.Runtime.AsyncResult.End(результат IAsyncResult) +688590
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult результат) +190
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, String routeServiceVirtualPath, Boolean flowContext, Boolean обеспечитьWFSсервис) +234
System.ServiceModel.Activation.HttpModule.ProcessRequest(Объект отправитель, EventArgs e) +359
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 System.Web.HttpApplication.ExecuteStep(шаг IExecutionStep, Boolean & завершен синхронно) +75

Что не так с моей конфигурацией и как я могу это решить?

4b9b3361

Ответ 1

Вам необходимо подписать службу с сертификатом. Вы можете сделать это, добавив в конфигурацию следующее:

<serviceBehaviors>
    <behavior name="">
        <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
        <serviceDebug includeExceptionDetailInFaults="false" />

        *<serviceCredentials>
            <serviceCertificate findValue="certificatename" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
        </serviceCredentials>*
     </behavior>
</serviceBehaviors>

Где certatename - это имя вашего сертификата. Чтобы создать сертификат, вы можете посмотреть здесь: Создайте самоподписанный сертификат