Como posso depurar um erro de 'provedor de associação padrão não pôde ser encontrado' com o WCF e um provedor de associação ASP.NET personalizado?

StackOverflow https://stackoverflow.com/questions/2325688

Pergunta

Isso é um problema para mim com o .NET 3.5 SP1 em execução no IIS7.5 de 64 bits (tentei forçar 32 bits, mas obtive o mesmo resultado).

Eu tenho um serviço WCF com o qual quero usar serviços de autenticação. Quando não tenho comportamento, as tintas do serviço WCF (respostas) sem nenhum erro. Outros serviços também trabalham com outros comportamentos

Assim que adiciono UsernameAuthentication ao comportamento que especifica um associação personalizada para autenticação a um serviço ...

  <serviceCredentials>
    <!-- Configure user name authentication to use the Membership Provider -->
    <userNameAuthentication userNamePasswordValidationMode ="MembershipProvider"
                            membershipProviderName ="MembershipService"/>
  </serviceCredentials>

O serviço explode e retorna o seguinte erro:

 Parser Error Message: Default Membership Provider could not be found.
 Source Error: 
 Line 49:     </authentication>
 Line 50:     
 Line 51:     <membership defaultProvider="MembershipService" userIsOnlineTimeWindow="15">
 Line 52:       <providers>
 Line 53:         <clear/>

O log de eventos tem este erro:

 WebHost failed to process a request.
 Sender Information: System.ServiceModel.Activation.HostedHttpRequestAsyncResult/59884855
 Exception: System.ServiceModel.ServiceActivationException: The service '/V4Service.svc' cannot be activated due to an exception during compilation.  The exception message is: Default Membership Provider could not be found. (C:\Code\SmartTrade Projects\SmartTrade.API\Web\SmartTrade.API\web.config line 50). ---> System.Configuration.ConfigurationErrorsException: Default Membership Provider could not be found. (C:\Code\SmartTrade Projects\SmartTrade.API\Web\SmartTrade.API\web.config line 50)
 at System.Web.Security.Membership.Initialize()
 at System.Web.Security.Membership.get_Providers()
 at System.ServiceModel.Configuration.UserNameServiceElement.ApplyConfiguration(UserNamePasswordServiceCredential userName)
 at System.ServiceModel.Configuration.ServiceCredentialsElement.ApplyConfiguration(ServiceCredentials behavior)
 at System.ServiceModel.Configuration.ServiceCredentialsElement.CreateBehavior()
 at System.ServiceModel.Description.ConfigLoader.LoadBehaviors[T](ServiceModelExtensionCollectionElement`1 behaviorElement, KeyedByTypeCollection`1 behaviors, Boolean commonBehaviors)
 at System.ServiceModel.Description.ConfigLoader.LoadServiceDescription(ServiceHostBase host, ServiceDescription description, ServiceElement serviceElement, Action`1 addBaseAddress)
 at System.ServiceModel.ServiceHostBase.ApplyConfiguration()
 at System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses)
 at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses)
 at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(Type serviceType, Uri[] baseAddresses)
 at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses)
 at System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath)
 at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath)
 at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)

Tenho certeza de que isso não é um problema com a configuração do provedor ou provedor, pois tenho esse provedor personalizado trabalhando com um site ASP MVC.

Alguma ideia?

Foi útil?

Solução

Comecei uma nova implementação personalizada do provedor a partir do zero, garantindo que todas as substituições estavam retornando corretamente. O meu original que eu pensava estar funcionando (que era há alguns meses atrás) e acontece que não funcionava mais.

Acontece que se você tiver o nome do provedor correto e o tipo correto na configuração que deixa apenas a implementação do provedor personalizado.

Portanto, se você tiver esse problema e tiver certeza de que sua configuração está correta, verifique sua implementação com um site simples do ASP.NET ou ASP.NET MVC.

Outras dicas

Recebi esse erro e, eventualmente, descobri que os caracteres ocultos UTF8 ou Unicode haviam encontrado seu caminho no meu arquivo web.config. Eu tive que excluir seções para descobrir que a seção Strings de aplicação estava corrompida.

Depois que o substituí de uma versão mais antiga, funcionou novamente. Algumas das cordas tinham espaço branco extra que era suspeito, não tenho certeza se poderia ter sido de corte e colar ou o quê. Você também pode tentar procurar seu arquivo web.config com um editor hexadecimente.

Eu tive o mesmo problema e passei quase uma semana descobrindo. Meu problema era que eu tive que definir a propriedade de nome substituir o mesmo valor que estava no nome do provedor da web.config. Eu odeio quando as soluções mais simples são tão difíceis de encontrar!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top