2011-02-14 3 views
0

Je suis en cours d'exécution sur SL4 VS2010. J'ai une application qui authentifie via un service Web à SPROC dans mon DB. Malheureusement, ce n'est pas RIA WCF/WCF, car je hérite du DB/services de mon client.Amusez-vous avec « Le serveur distant a renvoyé une erreur: NotFound » - Silverlight4 Sur le navigateur

Cela fonctionne parfaitement à l'intérieur d'un navigateur (via HTTPS). J'essaye de déplacer cette OOB, et c'est à ce moment que mon authentification échoue. Voici les étapes de mon travail ...

1) Propriétés SL App> Activer l'application en cours d'exécution Out of Browser 2) SL Propriétés App> Hors des paramètres du navigateur> Obliger élevée confiance lors de l'exécution OOB

Si je mets un point d'arrêt sur mon bouton d'ouverture de session, je vois que l'appel de service est en cours. Cependant, si je le franchis (ou si je définis un point d'arrêt sur le service Web d'ouverture de session), le code n'atteindra jamais ce niveau. Voici le bloc auquel il échoue:

public LogonSVC.LogonResponse EndLogon(System.IAsyncResult result) { 
      object[] _args = new object[0]; 
      LogonSVC.LogonResponse _result = ((LogonSVC.LogonResponse)(base.EndInvoke("Logon", _args, result))); 
      return _result; 
     } 

Je sais que l'utilisation d'une approbation élevée signifie que le fichier crossdomain.xml n'est pas nécessaire. J'en ai laissé tomber un qui permet tout, juste pour tester, et ça échoue toujours.

est ici le code qui appelle le service:

private void loginButton_Click(object sender, RoutedEventArgs e) 
    { 
     string Username = txtUserName.Text; 
     string Password = txtPassword.Password; 
     Uri iSilverlightServiceUriRelative = new Uri(App.Current.Host.Source, "../Services/Logon.asmx"); 
     EndpointAddress iSilverlightServiceEndpoint = new EndpointAddress(iSilverlightServiceUriRelative); 
     BasicHttpBinding iSilverlightServiceBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);// Transport if it's HTTPS:// 
     LogonService = new LogonSVC.LogonSoapClient(iSilverlightServiceBinding, iSilverlightServiceEndpoint); 
     LogonService.LogonCompleted += new EventHandler<LogonSVC.LogonCompletedEventArgs>(LogonService_LogonCompleted); 
     LogonService.LogonAsync(Username, Password); 
    } 

Mon LogonService_LogonCompleted ne se déclenche pas non plus (ce qui est logique, juste un heads-up).

Je ne sais pas comment Fiddler cela, comme cela est en cours d'exécution OOB avec le site servi par localhost/IIS. Je sais que cela fonctionne dans le navigateur, donc je suis curieux de savoir ce qui le casserait OOB.

MISE À JOUR J'ai changé ServiceReferences.ClientConfig aux URL relatives au lieu de absolue, à la recommandation d'un autre poste que je lis. Voici le code:

<configuration> 
<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="CommonSoap" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
       <security mode="Transport" /> 
      </binding> 
      <binding name="LogonSoap" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
       <security mode="Transport" /> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="/Services/Common.asmx" 
      binding="basicHttpBinding" bindingConfiguration="CommonSoap" 
      contract="CommonSVC.CommonSoap" name="CommonSoap" /> 
     <endpoint address="/Services/Logon.asmx" 
      binding="basicHttpBinding" bindingConfiguration="LogonSoap" 
      contract="LogonSVC.LogonSoap" name="LogonSoap" /> 
    </client> 
</system.serviceModel> 

MISE À JOUR 2

trace de la pile, si elle aide à tout le monde ...

at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result) 
    at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result) 
    at TSMVVM.TSMVVMLogonSVC.LogonSoapClient.LogonSoapClientChannel.EndLogon(IAsyncResult result) 
    at TSMVVM.TSMVVMLogonSVC.LogonSoapClient.TSMVVM.TSMVVMLogonSVC.LogonSoap.EndLogon(IAsyncResult result) 
    at TSMVVM.TSMVVMLogonSVC.LogonSoapClient.EndLogon(IAsyncResult result) 
    at TSMVVM.TSMVVMLogonSVC.LogonSoapClient.OnEndLogon(IAsyncResult result) 
    at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result) 

Merci,

Scott

+0

Cette erreur indique des problèmes sur le serveur. Implémentez les diagnostics comme ici: http://stackoverflow.com/questions/4773026/how-to-debug-wcf-service-call-works-in-vs-but-not-in-iis/4783388#4783388 et ajoutez des informations sur un vrai type de l'erreur. – vorrtex

+0

Hey Vorrtex. Cela semble être pour WCF. J'ai essayé de l'implémenter (ajoutez simplement system.diagnostics à mon web.config, oui?). Aucun fichier journal Je n'utilise pas WCF, j'utilise les services web asmx. –

Répondre

0

Je ne suis pas autorisé à commenter donc je vais devoir poster cette question comme une réponse

Est-ce parce que Silverlight traite tous les codes d'erreur http 200 autres que comme 404.

Fiddler pour vérifier la code d'état de réponse et essayez un gestionnaire http pour le changer en 200. C'était un problème courant dans silverlight 2 que je pensais avoir corrigé mais peut-être que le correctif était uniquement pour les services WCF et RIA.

+0

Comme je l'ai dit dans mon post, je ne sais pas comment utiliser le violoneur pour cela. La solution a un site Web (pas une application Web) qui est défini sur https: //localhost/ts/testSLpage.aspx, qui a mon application SL résidant à l'intérieur. Au-delà de ça, une fois que je déménagerai à OOB, je ne suis pas sûr de savoir comment cela affecte Fiddler non plus. –

+0

En outre, avec Fiddler ... J'ai essayé d'ajouter la solution proxy à mon web.config, j'ai changé mes adresses de point de terminaison à https: // mymachine/projectName/nompage, https: //ipv4.fiddler/projectName/ pageName ... J'ai navigué directement dans le navigateur vers https: // mymachine/projectName/pageName, et je l'ai également exécuté dans FF (qui n'a pas les mêmes problèmes) .... est le fait que cette HTTPS est-il un problème? –

+0

Ok, si vous utilisez OOB alors peut-être que fiddler n'est pas une bonne solution. Essayez Wireshark, c'est un outil plus compliqué mais qui capture tout le trafic sur la carte réseau plutôt que sur le navigateur. Vous devrez configurer des filtres pour tout supprimer en dehors du trafic de votre application. – BenCr

Questions connexes