"An error occured while attempting to find services at 'http://localhost/ServiceLogger.svc'"
Contexte de l'erreur
Je cherche à faire des logs avec Log4Net depuis une application Silverlight. J'ai créé une "Business Application Silverlight" hostée par une application ASP.NET. Je développe mon service de Log dans BusinessApplicationLog4Net.Web et par l'intermédiaire d'un "Service Reference", je donnerai accès aux services de Log dans mon application Silverlight (ou du moins je l'espère) :ASP.NET qui host un WCF Service pour une application Silverlight |
Siverlight hosted application - Add Service Reference |
Siverlight - Add Servcice Reference ... - An error occured while attempting to find services |
Solution ?
Dans le fichier ASP.NET Web.config :<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Je propose de mettre aspNetCompatibilityEnabled à false. Pourquoi ? Tout simplement parce que j'ai cherché et trouver cette préconisation, également en regardant le détail de cette erreur :
Cette fois mon Service est enfin découvert :
Silverlight - Service Reference - AspNetCompatibility Error |
Siverlight - Add Servcice Reference ... - Mon service est enfin découvert |
Je lance l'application :
Siverlight - aspNetCompatibilityEnabled à false |
Quelle belle erreur ! Toutes ces applications demandent que l'utilisateur soit ou non authentifié et le service d'authentification de Silverlight dans ce cas ne reconnait plus mon utilisateur.
C'est perdu !
Clique sur le bouton pour déclencher la méthode buttonMakeLog_Click() de l'application Silverlight qui déclenche un log à travers le service et dans l'application ASP.NET.
Conclusion
Et c'est bien dommage car en câblant un bouton sur la View Home de mon application Silverlight :
\\BusinessApplicationLog4Net\BusinessApplicationLog4Net\Views\Home.xaml.cs :
private void buttonMakeLog_Click(object sender, System.Windows.RoutedEventArgs e)
{
var log = new ServiceLogger.ServiceLoggerClient();
log.LogMessageAsync("click on button produced log on server");
textBox.Text = "log " + nbLogs.ToString();
nbLogs++;
}
Si je clique sur "Ok" et sur mon mon bouton en ayant pris soin de mettre un point d'arrêt dans l'application ASP.NET :
Point d'arrêt dans l'application ASP.NET qui hoste le Service Logger |
Clique sur le bouton Make Logs |
Le point d'arrêt est bien déclenché |
Et comme je suis un fou furieux, en tous cas un curieux et maintenant que le code de mon service est généré dans Silverlight, je remets aspNetCompatibilityEnabled à true et j'exécute cette fois l'erreur est la suivante :
dans :
\\BusinessApplicationLog4Net\BusinessApplicationLog4Net\Service References\ServiceLogger\Reference.cs
j'obtiens :
Cette fois le Log ne sort plus de Silverlight |
Solution
Il faut utiliser l'attribut de la Class :
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class ServiceLogger : IServiceLogger
Pour que cela fonctionne.
Aucun commentaire:
Enregistrer un commentaire
Pour plus d'interactivité, n'hésitez pas à laisser votre commentaire.