2010-12-11 58 views
0

semaines dernière, j'ai créé un service web ASMX qui renvoie plusieurs lignes à l'aide du savon.WCF - retour plusieurs enregistrements

je maintenant passer à WCF et suis désireux de faire la même chose.

Dans mon ASMX service web que je fais ce qui suit ..

public class sample 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string NameOfFile { get; set; } 
    //public int Distance { get; set; } 
} 

[WebMethod] 
public sample[] Test(int count, float lat, float lng) 
{ 
    DataTable dt = new Gallery().DisplayNearestByLatLong(count, lat, lng); 
    var samples = new List<sample>(); 

    foreach (DataRow item in dt.Rows) 
    { 
     var s = new sample(); 
     s.Id = item[0].ToString(); 
     s.Name = item[1].ToString(); 
     s.NameOfFile = item[2].ToString(); 
     //s.Distance = (int)item[3]; 

     samples.Add(s); 
    } 
    return samples.ToArray(); 
} 

Ce code fonctionne très bien, mais maintenant je veux faire la même chose, mais en utilisant WCF.

Mes fichiers actuels WCF ressembler à ceci (j'ai copié un tutoriel mais avez configuré le contrat de données (qui je pense est nécessaire?))

GalleryWebService.cs 
public class GalleryWebService : IGalleryWebService 
{ 
    public string GetData(int value) 
    { 
     return string.Format("You entered: {0}", value); 
    } 

    public CompositeType GetDataUsingDataContract(CompositeType composite) 
    { 
     return composite; 
    } 

    public CompositeType GetTestData() 
    { 
     return new CompositeType(); 
    } 
} 

IGalleryWebService.cs

[ServiceContract] 
public interface IGalleryWebService 
{ 
    [OperationContract] 
    string GetData(int value); 

    [OperationContract] 
    CompositeType GetDataUsingDataContract(CompositeType composite); 

    [OperationContract] 
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, 
      RequestFormat = WebMessageFormat.Json, 
      ResponseFormat = WebMessageFormat.Json, 
      UriTemplate = "test/random")] 
    CompositeType GetTestData(); 
} 

[DataContract] 
public class CompositeType 
{ 
    [DataMember] 
    string _id; 
    public string Id 
    { 
     get { return _id; } 
     set { _id = value; } 
    } 

    [DataMember] 
    string _name = "Hello"; 
    public string Name 
    { 
     get { return _name; } 
     set { _name = value; } 
    } 

    [DataMember] 
    string _nameoffile = "Hello"; 
    public string NameOfFile 
    { 
     get { return _nameoffile; } 
     set { _nameoffile = value; } 
    } 
} 

Quelle est la meilleure façon de le faire et comment? Votre aide est grandement appréciée!

Merci d'avance.

Répondre

2

WCF n'a pas tant de différences:

[DataContract] 
public class sample 
{ 
    [DataMember] 
    public string Id { get; set; } 
    [DataMember] 
    public string Name { get; set; } 
    [DataMember] 
    public string NameOfFile { get; set; } 
} 

DataMember attributs ne sont pas définis par défaut, donc ils sont obligatoires en quelque sorte.

[ServiceContract] 
public interface IGalleryWebService 
{ 

    [OperationContract] 
    sample[] Test(int count, float lat, float lng); 
} 

De plus, si vous utilisez basicHttpBinding et ajouter un lien en utilisant « Ajouter une référence Web » (au lieu de référence de service) - vous recevrez le même résultat que vous auriez si vous avez utilisé le service asmx.

+0

O.k, je l'ai mis en œuvre que mais quand je l'ai mis sur ma vie serveur web IIS ne fonctionne pas. C'est seulement quand je mets DataTable. Avez-vous des idées à ce sujet? – tmutton

+0

Je reçois l'erreur .. IIS a spécifié des schémas d'authentification 'IntegratedWindowsAuthentication, Anonymous', mais la liaison prend uniquement en charge la spécification d'un seul schéma d'authentification. Les schémas d'authentification valides sont Digest, Negotiate, NTLM, Basic ou Anonymous. Modifiez les paramètres IIS afin que seul un schéma d'authentification unique soit utilisé. – tmutton

+0

Panneau de configuration -> Outils d'administration -> IIS -> Sélectionnez un site Web ou un applciation -> Double-cliquez sur l'icône Authentificcation -> désactiver l'authentification Windows intégrée – vorrtex