Question

Je suis en train de passer un tableau d'un objet simple à un service Web et je suis vraiment coincé sur cette erreur lors de la compilation de mon projet client web:

Impossible de convertir implicitement le type 'TRIMBrokerUtil.MetaData []' à 'TRIMBrokerASMXProxy.ASMXProxy.MetaData []

Voici mon projet "utilitaire" compilé dans TRIMBrokerUtil.dll:

namespace TRIMBrokerUtil
{
    public class MetaData
    {
    protected string _Name;
    protected string _Value;
    public MetaData(string keyword, string setting) 
    {
        this.Name = keyword;
        this.Value = setting;
    }
    public string Name
    {
        get
        {
        return this._Name;
        }
        set
        {
        Name = value;
        }
    }
    public string Value
    {
        get
        {
        return this._Value;
        }
        set
        {
        _Value = value;
        }
    }
    }

Voici un extrait du service Web qui compile aussi bien:     en utilisant TRIMBrokerUtil;     espace de noms TRIMBrokerService     {         [WebService (Namespace = " http://tempuri.org/ ")]         [WebServiceBinding (conformsTo = WsiProfiles.BasicProfile1_1)]         [ToolboxItem (false)]         public class service de fichiers: System.Web.Services.WebService         {

    [WebMethod]
    public string UploadFile(byte[] incomingArray
        , string FileName
        , long FileLengthInBytes
        , MetaData[] metaDataArray)
    {

... et l'utilisation plus tard comme ceci:

Update update = BuildMetaData(metaDataArray);

... et ceci:

private Update BuildMetaData(MetaData[] nvPairs)
{
    Update update = new Update();
    InputProperty[] ip = new InputProperty[nvPairs.Length];
    int i;
    for (i=0; i < nvPairs.Length; i++)
    {
    ip[i].Name = "udf:" + nvPairs[i].Name;
    ip[i].Val = nvPairs[i].Value;
    }
    update.Items = ip;
    return update;
}

Ensuite, (via « Ajouter une référence Web ») J'ai ma classe proxy pour le webservice ASMX dans un projet distinct et sans problème compile. A l'intérieur du fichier généré reference.cs je trouve ce qui semble OK:

    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/UploadFile", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    public string UploadFile([System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] byte[] incomingArray, string FileName, long FileLengthInBytes, MetaData[] metaDataArray) {
        object[] results = this.Invoke("UploadFile", new object[] {
                    incomingArray,
                    FileName,
                    FileLengthInBytes,
                    metaDataArray});
        return ((string)(results[0]));
    }

Maintenant, pour l'erreur qui se produit dans la compilation dans le projet client Web (default.aspx.cs):

    using TRIMBrokerUtil;

public partial class _Default : System.Web.UI.Page
{
    private void UploadFile(HttpPostedFile postedFile
                , string fileNameOnly
                , MetaData[] metaDataArray)
    {
        string strURI = string.Empty;
        TRIMBrokerASMXProxy.ASMXProxy.FileService client = new TRIMBrokerASMXProxy.ASMXProxy.FileService();
        BinaryReader b = new BinaryReader(postedFile.InputStream);
        byte[] binData = b.ReadBytes(numBytes);
        TRIMBrokerASMXProxy.ASMXProxy.MetaData[] kvData = metaDataArray; // error complains about this line
        strURI = client.UploadFile(binData, fileNameOnly, binData.Length, kvData );

J'ai aussi essayé de changer les 2 dernières lignes ci-dessus simplement celui-ci ligne:

strURI = client.UploadFile(binData, fileNameOnly, binData.Length, metaDataArray);

... mais ce changement introduit une 2ème erreur du compilateur qui se lit comme suit:

La correspondance de la meilleure méthode surchargée pour 'TRIMBrokerASMXProxy.ASMXProxy.FileService.UploadFile (byte [], string, long, TRIMBrokerASMXProxy.ASMXProxy.MetaData [])' a des arguments non valides

(notez l'erreur d'origine de « ne peut pas convertir » est la 2ème erreur).

Désolé d'être si bavard ci-dessus. Espérons que vous pouvez aider à faire la lumière sur cette confusion.

Était-ce utile?

La solution

Vous essayez d'affecter un tableau de TRIMBrokerUtil.MetaData à un tableau de TRIMBrokerASMXProxy.ASMXProxy.MetaData. Rappelez-vous que le proxy asp.net déclare son propre type.

Il suffit de copier les données dans un nouveau tableau avec le type de proxy.

Autres conseils

Lorsque vous ajoutez une référence au service Web, Visual Studio génère automatiquement le code pour les objets qui sont utilisés en tant que paramètres aux fonctions du service Web. C'est là votre classe vient de TRIMBrokerASMXProxy.ASMXProxy.MetaData.

Ce n'est pas la même chose que votre classe TRIMBrokerUtil.MetaData. Vous pouvez supprimer la classe de votre espace de noms et il suffit d'utiliser TRIMBrokerUtil celui du proxy de service Web au lieu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top