J'ai un petit service Web de test pour émuler quelque chose d'étrange que je remarque dans une application du monde réel. Comme la démo montre le même comportement que l'application, je vais utiliser la démo pour la brièveté. En bref Mon fichier d'interface de service ressemble à ceci (comme vous pouvez le voir, il s'agit du service WCF par défaut créé par VS2008 mais j'ai ajouté une nouvelle méthode publique (GetOtherType()) et deux nouvelles classes en bas (SomeOtherType et SomeComplexType). SomeOtherType gère une liste générique de type SomeComplexTypeType non exposé par le service WCF
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WCFServiceTest
{
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
[OperationContract]
SomeOtherType GetOtherType();
}
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
[DataContract]
public class SomeOtherType
{
public List<SomeComplexType> Items { get; set; }
}
[DataContract]
public class SomeComplexType
{
}
}
Mon service est mis en œuvre comme suit
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WCFServiceTest
{
public class Service1 : IService1
{
#region IService1 Members
public string GetData(int value)
{
throw new NotImplementedException();
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
throw new NotImplementedException();
}
#endregion
#region IService1 Members
public SomeOtherType GetOtherType()
{
throw new NotImplementedException();
}
#endregion
}
}
Le problème que j'ai est que si j'inclure une référence de service à ce service dans un ASP. Application Web NET, je ca Ne voyez pas SomeComplexType via intellisense. L'erreur est liée au type ou à l'espace de noms introuvable. Cependant, SomeOtherType peut être trouvé (je suppose que le type est un type de retour d'une des méthodes publiques). Ai-je raison de penser que je ne peux pas exposer un type à partir d'un service WCF si ce type n'apparaît pas dans la signature de méthode d'une de mes méthodes publiques (type de retour ou argument)? Si oui, comment serais-je capable d'itérer sur les éléments dans une instance de SomeOtherType sur le client?
Merci beaucoup et j'espère que c'est clair.
Simon
C'est vraiment étrange. Pourquoi définissez-vous vos contrats de données et le service lui-même dans un endroit? Aussi, est-ce dans le fichier SVC ou dans un fichier .cs séparé? – Slavo