2011-04-15 2 views
0

Je consomme un WCF dans une classe class en ajoutant une référence Web du service WCF.Erreur lors de la consommation du service WCF dans ClassLibrary

Toutes les classes de service sont affichées, leur est aucune erreur de construction.

Mais lorsque vous appelez la méthode de service, obtenir l'erreur mentionnée ci-dessous: -

Et je passe un objet dans la méthode qui contient le code XML.

Mais lorsque je crée une classe proxy à l'aide de svcutil.exe, alors j'appelle la méthode de service avec le même objet ayant le même xml aucune erreur ne vient, cela fonctionne très bien.

_ ** Cela signifie que dans ClassLibrary, nous pouvons consommer un service WCF uniquement en créant un proxy non en ajoutant la référence Web du service WCF.

La déclaration ci-dessus est-elle correcte ou non?

Sinon, s'il vous plaît fournir une solution pour elle ** _

** Erreur:.

System.InvalidOperationException: There is an error in XML document (1, 528). ---> System.InvalidOperationException: Instance validation error: '' is not a valid value for PropertySubType. 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHotelFlow.Read29_PropertySubType(String s) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHotelFlow.Read30_Hotel(Boolean isNullable, Boolean checkType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHotelFlow.Read31_SearchResult(Boolean isNullable, Boolean checkType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHotelFlow.Read100_SearchHotelsResponse() 
    at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer8.Deserialize(XmlSerializationReader reader) 
    at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) 
    --- End of inner exception stack trace --- 
    at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) 
    at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) 
    at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) 
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 
    at ClassLibTestTouricoWCFinCsharp.com.touricoholidays.demo2.HotelFlow.SearchHotels(SearchRequest request) in C:\Documents and Settings\Prakash.singh\My Documents\Visual Studio 2005\Projects\ClassLibTestTouricoWCFinCsharp\ClassLibTestTouricoWCFinCsharp\Web References\com.touricoholidays.demo2\Reference.cs:line 132 
    at ClassLibTestTouricoWCFinCsharp.Class1.test() in C:\Documents and Settings\Prakash.singh\My Documents\Visual Studio 2005\Projects\ClassLibTestTouricoWCFinCsharp\ClassLibTestTouricoWCFinCsharp\Class1.cs:line 78** 

Répondre

1

Vous voyez essentiellement la différence entre un Service Reference and a Web Reference. Ce que cela signifie, c'est que le service WCF que vous consommez n'est pas compatible avec l'ajout d'une référence Web et que vous devez plutôt utiliser la référence du service. Cela dit, il est beaucoup plus propre de ne pas utiliser non plus, et à la place, utilisez un ChannelFactory ou créez votre propre proxy en dépendant de ClientBase. Voici un exemple d'utilisation d'une ChannelFactory.

ChannelFactory<IContract> factory = new ChannelFactory<IContract>("BindingConfigName"); 
IContract channel = factory.CreateChannel(); 

channel.YourOperation(); 

((ICommunicationObject)channel).Close(); 
Questions connexes