2012-03-07 30 views
13

認証にMembershipProviderを使用するWCFサービスを作成しようとしています。それは内部サービスなので、私は現在トランスポートレベルのセキュリティ(HTTPS)を適用することに興味がなく、今のところ証明書なしでこれを行うにはします。さらに、これはサービスを公開することを複雑にし、後でこれを行うことを希望します。私もMembershipProviderを設定せずに(基本構成を構築してきましたが、WCFは私に次の例外投げ続けて:。WCF:サービス証明書が提供されていません。 ServiceCredentialsでサービス証明書を指定する

サービス証明書が提供されていないが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> 

例外のスタックトレース:

[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.Securit y.ServiceCredentialsSecurityTokenManager.CreateTlsnegoSecurityTokenAuthenticator(RecipientServiceModelSecurityTokenRequirement recipientRequirement、ブール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 タイムアウト)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 timeo ut)+318
System.ServiceModel.Dispatcher.ChannelDispatcher。開く時](TimeSpanの タイムアウト)72

[InvalidOperationExceptionが: ':// localhostを:HTTP 9800/Service1.svc' でのChannelDispatcher契約(複数可) ' "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が: 'のhttp:// localhostを:9800/Service1.svc' でのChannelDispatcher契約(S)と ' "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(文字列 normalizedVirtualPath)206
System.ServiceModel.HostingManager.EnsureServiceAvailable(文字列 normalizedVirtualPath)651

[ServiceActivationException:サービス '/Service1.svcは' ことができませんコンパイル中に例外のために起動されました。例外 メッセージは次のとおりです。 'のhttp:// localhostを:9800/Service1.svc' でのChannelDispatcher契約(S)と ' "IService1は、"' そのIChannelListenerを開くことができません..]
System.Runtime.AsyncResult 。終了(IAsyncResultインター結果)688590
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResultインター 結果)190
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(のHttpApplication コンテキスト、文字列routeServiceVirtualPath、ブールflowContext、ブール ensureWFService )234
System.ServiceModel.Activation.HttpModule.ProcessRequest送信者(オブジェクト、のEventArgs電子)+359
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 148のSystem.Web。 HttpApplication.ExecuteStep(IExecutionStepステップ、ブール値&)同期)+75

私の設定には何が問題なのですか?これをどのように解決できますか?

+0

[このブログの記事](http://webservices20.blogspot.nl/2008/11/introducing-wcf-clearsernamebinding.html)は答えを示しています。 –

+0

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

+0

セキュリティを完全に無効にしたくないと思っていますか?そうすれば、wshttpバインディングのメッセージセキュリティは次のように無効になります。 '' –

答えて

16

証明書を使用してサービスに署名する必要があります。これを行うには、次の設定を構成に追加します。

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

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

certificatenameは、証明書の名前です。証明書を作成するには、ここをクリックしてください: Create a self signed certificate

+1

これは内部サービスなので、現在はトランスポートレベルのセキュリティを適用することには関心がありません。証明書を作成したい場合は、サービスの展開が複雑になるためです。証明書なしでこれを設定できますか? –

+1

残念ながら、内部テストの場合でも、証明書を作成する必要はありません。独自のルートレベル証明機関証明書を作成し、これを使用してサービスの2番目の証明書を発行することができます。ロールアウトする各サーバーに両方ともインストールする必要があります。 – 79E09796

+0

この証明書があってもこのエラーが発生します。何がありますか? – ashes999

関連する問題