Ho un servizio WCF ho creato in un WebApplication con la seguente configurazione nel file web.configCome DefaultNetworkCredentials il passaggio al servizio WCF
<service name="RedwebServerManager.WebApplication.DesktopService"
behaviorConfiguration="ServBehave">
<endpoint
address=""
binding="basicHttpBinding"
bindingConfiguration="basicBind"
contract="RedwebServerManager.WebApplication.IDesktopService"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="basicBind">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
Questo servizio ha bisogno di prendere in WindowsCredentials in per ottenere informazioni in un database basato sull'utente autenticato. Questa corrente servizio ha un metodo di implementazione di un'interfaccia con la seguente firma
[ServiceContract]
public interface IDesktopService
{
/// <summary>
/// Gets the clients.
/// </summary>
/// <returns>IEnumerable<ClientServiceModel>.</returns>
[OperationContract]
IEnumerable<ClientServiceModel> GetClients();
}
Ho un Windows Form, che sta consumando il servizio WCF e voglio passare attraverso le credenziali dell'utente corrente utilizzando l'applicazione in quanto ciò stare tutti seduti sul nostro dominio. L'app.config è la seguente
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDesktopService">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://redwebservermanager.redweb.network/DesktopService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDesktopService"
contract="ManagerService.IDesktopService" name="BasicHttpBinding_IDesktopService" />
</client>
</system.serviceModel>
Se ho impostato manualmente le credenziali di nome utente e password tutto funziona correttamente comunque ho cercato
managerService.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials
modo che io possa passare le credenziali degli utenti attuali sopra ma io continua a ricevere un errore nella chiamata a GetClients() che il nome utente e la password non sono impostati.
Qualcuno può aiutarmi? Ho anche provato ad aggiungere
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
al metodo ma questo non ha fatto differenza.
So che sembra sciocco, ma hai provato ** non impostando ** 'ClientCredential' affatto. Stiamo usando 'NetTcpBinding' con sicurezza di trasporto e il lavoro sopra indicato per noi. –