2012-03-07 6 views
13

Próbuję utworzyć usługę WCF, która korzysta z uwierzytelniania MembershipProvider. Ponieważ jest to usługa wewnętrzna, nie jestem obecnie zainteresowany zastosowaniem zabezpieczenia poziomu transportu (HTTPS) i chcę (na razie) zrobić to bez certyfikatu. Poza tym komplikuje to wdrażanie usługi i chcę to zrobić w późniejszym czasie. I został zbudowany podstawową konfigurację (nawet bez konfigurowania MembershipProvider, ale WCF utrzymuje rzucanie mi następujący wyjątek:.WCF: Certyfikat usługi nie jest dostarczany. Określ certyfikat usługi w ServiceCredentials

Certyfikat usługa nie jest świadczona Określ certyfikat usługi w ServiceCredentials

. Oto moja konfiguracja:

<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 z wyjątkiem:

[InvalidOperationException: Certyfikat usługi nie został dostarczony. Określ certyfikat usługi w ServiceCredentials. ]
System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateServerX509TokenProvider() +12382737 System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateLocalSecurityTokenProvider (RecipientServiceModelSecurityTokenRequirement recipientRequirement) +63
System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateSecurityTokenProvider (SecurityTokenRequirement wymóg) + 48
System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateTlsnegoServerX509TokenProvider (RecipientServiceModelSecurityTokenRequirement recipientRequirement) +191
System.ServiceModel.Securit y.ServiceCredentialsSecurityTokenManager.CreateTlsnegoSecurityTokenAuthenticator (RecipientServiceModelSecurityTokenRequirement recipientRequirement, logiczna 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.S erviceModel.Security.SymmetricSecurityProtocolFactory.OnOpen (TimeSpan timeout) +181
System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen (TimeSpan timeout) +21
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout) +318
System.ServiceModel.Security.SecurityListenerSettingsLifetimeManager.Open (TimeSpan timeout) +94
System.ServiceModel.Channels.SecurityChannelListener`1.OnOpen (TimeSpan timeout) +240
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeo ut) +318
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen (TimeSpan timeout) +72

[InvalidOperationException: The ChannelDispatcher na 'http: // localhost: 9800/Service1.svc' z umowy (-ów) ' "IssueAndRenewSession"' nie jest w stanie otworzyć IChannelListener. ]
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen (TimeSpan timeout) +118
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout) +318 System.ServiceModel.ServiceHostBase.OnOpen (TimeSpan timeout) + 111
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout) +318
System.ServiceModel.Security.SecuritySessionSecurityTokenAuthenticator.OnOpen (TimeSpan timeout) +131
System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen (TimeSpan timeout) +21
System.ServiceModel.Channels.CommunicationObject .Open (TimeSpan timeout) +318
System.ServiceModel.Security.CommunicationObjectSecurityTokenAuthenticator.Open (TimeSpan timeout) +20
System.ServiceModel.Security.SecuritySessionServerSettings.OnOpen (TimeSpan timeout) +792
System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen (TimeSpan timeout) +21
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout) +318
System.ServiceModel.Security.SecurityListenerSettingsLifetimeManager.Open (TimeSpan czasu oczekiwania) +148
System.ServiceModel.Channels.SecurityChannelListener`1.OnOpen (TimeSpan timeout) +240
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout) +318
System.ServiceModel.Dispatcher.ChannelDispatcher .OnOpen (TimeSpan timeout) +72

[InvalidOperationException: The ChannelDispatcher na 'http: // localhost: 9800/Service1.svc' z umową (e) ' "IService1"' jest stanie otworzyć jego IChannelListener.]
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen (TimeSpan timeout) +118
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout) +318 System.ServiceModel.ServiceHostBase.OnOpen (TimeSpan timeout) +111
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan limit czasu) +318
System.ServiceModel.HostingManager.ActivateService (String normalizedVirtualPath) +206
System.ServiceModel.HostingManager.EnsureServiceAvailable (String normalizedVirtualPath) +651

[ServiceActivationException: Usługa '/Service1.svc' nie może być aktywowany z powodu wyjątku podczas kompilacji. Wyjątkiem wiadomości wynosi: ChannelDispatcher na 'http: // localhost: 9800/Service1.svc' z umową (e) ' "IService1"' jest stanie otworzyć jego IChannelListener ..]
System.Runtime.AsyncResult .Koniec (wynik IAsyncResult) +688590
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End (IAsyncResult wynik) +190
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous (HttpApplication kontekst, String routeServiceVirtualPath, Boolean flowContext, Boolean ensureWFService) +234
System.ServiceModel.Activation.HttpModule.ProcessRequest (Przedmiot nadawcy EventArgs e) +359
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 system.Web. HttpApplication.ExecuteStep (krok IExecutionStep, Boolean & comp letedSynchronously) +75

Co jest nie tak z moją konfiguracją i jak mogę to rozwiązać?

+0

[Ten post na blogu] (http://webservices20.blogspot.nl/2008/11/introducing-wcf-clearusernamename.html) daje odpowiedź. –

+0

Zobacz http://webservices20.blogspot.nl/2008/11/introducing-wcf-clearusernamebinding.html – Steven

+0

Zgaduję, że nie chcesz całkowicie wyłączyć zabezpieczenia (chwilowo oczywiście)? Jeśli to zrobisz, wyłączysz zabezpieczenia wiadomości na twoim powiązaniu wshttp, tak jak poniżej: '' –

Odpowiedz

16

Musisz podpisać usługę za pomocą certyfikatu. Możesz to zrobić, dodając następujące ustawienia do konfiguracji:

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

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

Gdzie nazwa_certyfikatu to nazwa twojego certyfikatu. Aby utworzyć certyfikat, możesz sprawdzić: Create a self signed certificate

+1

Ponieważ jest to usługa wewnętrzna, nie interesuje mnie obecnie stosowanie zabezpieczeń poziomu transportu, a ja nie chcesz utworzyć certyfikat, ponieważ komplikuje to wdrażanie usługi. Czy mogę to skonfigurować bez certyfikatu? –

+1

Nie, niestety, musisz utworzyć certyfikat, nawet do testów wewnętrznych. Można utworzyć własny certyfikat urzędu certyfikacji na poziomie katalogu głównego, a następnie użyć go do wydania drugiego certyfikatu dla usługi. Oba muszą być zainstalowane na każdym serwerze, na który się pakujesz. – 79E09796

+0

Nadal dostaję ten błąd, nawet gdy obecny jest ten certyfikat. Co daje? – ashes999

Powiązane problemy