2009-08-27 4 views
0

J'ai un service WCF auquel je peux me connecter à partir de mon application Web et obtenir des données.Problème de référence Web sur WCF

J'ai maintenant ajouté une référence Web à ce projet wcf dans un fichier wsdl fourni par une compagnie maritime. L'intention est d'obtenir des devis d'expédition ..

Je suis capable d'accéder aux objets qui sont générés à partir de ce fichier wsdl mais quand j'appelle service.Authenticate ("DEMO");

méthode presque rien ne se passe. Je débogue et vois le débogueur continuer aux lignes suivantes mais il n'y a aucun changement sur les paramètres de service et service.isauthorized est null ..

Pouvez-vous me conduire à la façon dont je devrais déboguer plus loin et les choses que je devrais vérifier, ou si il y a des étapes supplémentaires que je dois assurer d'avoir une référence web travaillant sur l'application WCF

Merci

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 
using ShippingCalculator.com.freight.api; 

namespace ShippingCalculator 
{   
    public class ShippingService : IShippingService 
    { 
     freight_service service = new freight_service(); 


     public string GetData(int value) 
     { 
      service.setConnectionType(".net"); 
      service.Authenticate("DEMO"); 

      OriginRequest origin = new OriginRequest(); 
      origin.zip = "60101"; 

      DestinationRequest destination = new DestinationRequest(); 
      destination.zip = "10001"; 

      PackageRequest package = new PackageRequest(); 
      package.weight = "10"; 

      ShipmentInfoRequest shipmentInfo = new ShipmentInfoRequest(); 
      shipmentInfo.ship_date = DateTime.Now.AddDays(5); 

      service.setOrigin(origin); 
      service.setDestination(destination); 
      service.setPackage(package); 
      service.setShipmentInfo(shipmentInfo); 

      Quote quote = service.getQuote(); 

      return string.Format("Quote Number: {0}<br /> ", quote.QuoteNumber); 
     } 

    } 
} 


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using ShippingTestApp.ShippingServiceReference; 

namespace ShippingTestApp.Controllers 
{ 
    [HandleError] 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      ShippingServiceClient shipClient = new ShippingServiceClient(); 
      shipClient.GetData(0); 

      ViewData["Message"] = shipClient.GetData(0); 

      return View(); 
     }  

    } 
} 
+0

L'objet expéditeur est-il un service ou s'agit-il d'une donnée renvoyée par le service? –

+0

son service – kaivalya

+0

Êtes-vous en mesure de poster un fragment de votre code source? –

Répondre

1

Si l'on suppose la propriété « isAuthorized » fait partie de la classe proxy sur laquelle vous invoquez le service; Les propriétés indiquent l'état, qui ne fait pas vraiment partie du modèle de services pour les proxys de client de service WCF. Selon les résultats de la méthode '.authorize()', votre classe de réponse devrait vous dire ce que vous devez savoir concernant l'autorisation utilisateur et vous devez gérer vous-même l'état 'isauthorized', probablement via une classe de couche application qui enveloppe le proxy WCF .

Pour déterminer si le service est appelé, vous pouvez activer le suivi WCF dans web.config ou installer une application de suivi réseau telle que Netmon ou Wireshark. Pour le traçage WCF, vous devez exécuter l'éditeur de configuration de service fourni avec le SDK Windows (SvcConfigEditor.exe). Pour la route de traçage réseau, exécutez l'application de trace réseau, définissez un filtre de capture pour afficher uniquement les paquets vers/depuis l'adresse IP de l'hôte physique WCF et surveillez le trafic réseau entre le serveur client Web et le serveur WCF.

0

Je ne connais pas les composants internes de votre objet freight_service, mais un service WCF n'a pas de propriétés. Un [ServiceContract] peut seulement exposer des méthodes. Le scénario d'authentification WCF classique génère une exception si vous ne pouvez pas vous authentifier ou si vous utilisez un service de session, vous avez besoin d'une autre méthode, telle que IsAuthorized(), qui renvoie un booléen stocké par la session.