2009-01-05 6 views
0

J'essaie d'appeler une méthode de webservice comme ceci:Consommant WebService De CompactFramework client

myService.Register("mystring"); 

La définition de webmethod est juste:

[WebMethod] 
public void Register(string s) 
{ 
} 

Mais je reçois le System.InvalidOperationException suivant:

"Le type System.String n'était pas prévu.Utilisez l'attribut XmlInclude ou SoapInclude pour spécifier les types qui ne sont pas connus de manière statique."


at System.Xml.Serialization.AccessorCollection.findAccessor(Type t) 
    at System.Xml.Serialization.XmlSerializationWriter.EnqueueMember(MemberValueCollection members, LogicalMemberValue member, SerializationQueue attributes, SerializationQueue elements, Object fetcherTarget, String parentElementNamespace) 
    at System.Xml.Serialization.XmlSerializationWriter.EnqueueMembers(MemberValueCollection members, SerializationQueue attributes, SerializationQueue elements, Object fetcherTarget, String parentElementNamespace) 
    at System.Xml.Serialization.XmlSerializationWriter.SerializeComplexAsElement(LogicalType serializeAs, Accessor accessor, Object value, SerializationQueue delayedWork, Boolean recursiveCall, Boolean requiresTypeAttr, XmlSerializerNamespaces serializerNs) 
    at System.Web.Services.Protocols.SoapMessageFormatter.SerializeComplexAsElement(LogicalType serializeAs, Accessor accessor, Object value, SerializationQueue delayedWork, Boolean recursiveCall, Boolean requiresTypeAttr, XmlSerializerNamespaces ns) 
    at System.Xml.Serialization.XmlSerializationWriter.SerializeAsElement(Accessor accessor, Object value, Object fetcherTarget, SerializationQueue delayedWork, Boolean recursiveCall, Boolean schemaReqTypeAttr, XmlSerializerNamespaces serializerNs) 
    at System.Xml.Serialization.XmlSerializationWriter.serializeMembers(SerializationQueue queue, SerializationQueue delayedWork, Boolean recursiveCall, Boolean schemaReqTypeAttr, XmlSerializerNamespaces serializeNs) 
    at System.Web.Services.Protocols.SoapMessageFormatter.execute(String targetNamespace) 
    at System.Web.Services.Protocols.SoapMessageSerializer.Serialize(XmlWriter writer, SoapHttpClientProtocol client, Object[] parameters, LogicalSoapMethod soapMethod, Boolean soap12) 
    at System.Web.Services.Protocols.SoapHttpClientProtocol.doInvoke(String methodName, Object[] parameters, WebClientAsyncResult asyncResult) 
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 

Google ne tourne pas quoi que ce soit utile et je suis à une impasse si les suggestions seraient les bienvenues. Ma seule pensée jusqu'ici est que c'est une sorte de discordance parce que CF utilise une version différente du System.dll au projet webservice.

+0

Je viens d'exécuter un test rapide pour consommer le service Web à partir de code non-CF et il semble fonctionner comme prévu. –

Répondre

0

Cela a été causé par le fait que j'utilisais une sous-classe de la référence Web, et également à l'aide d'une interface, à savoir:

public class MyWebServiceReference : RawWebServiceReference, IService {} 

L'interface était dans un projet distinct au RawWebServiceReference et MyWebServiceReference, et quelques-uns l'aspect de ceci causait l'erreur.