Frage

Ich versuche, ein Array eines einfachen Objekts an einen Web-Service zu übergeben, und ich bin wirklich auf diesem Fehler während der Kompilierung meines Web-Client-Projektes fest:

Kann nicht implizit Typ 'TRIMBrokerUtil.MetaData []' auf 'TRIMBrokerASMXProxy.ASMXProxy.MetaData []

konvertieren

Hier ist mein "Dienstprogramm" Projekt in TRIMBrokerUtil.dll zusammengestellt:

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;
        }
    }
    }

Hier ist ein Ausschnitt des Web-Service, der auch fein kompiliert:     Verwendung TRIMBrokerUtil;     Namespace TRIMBrokerService     {         [WebService (Namespace = " http://tempuri.org/ ")]         [WebServiceBinding (conformsTo = WsiProfiles.BasicProfile1_1)]         [ToolboxItem (false)]         public class File: System.Web.Services.WebService         {

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

... und Nutzung später als diese:

Update update = BuildMetaData(metaDataArray);

... und folgt aus:

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;
}

Als nächstes (via „Add Web Reference“) ich meine Proxy-Klasse für die ASMX Webservice in einem separaten Projekt haben und es kompiliert ohne Problem. Im Innern der erzeugten reference.cs Datei finde ich das, das in Ordnung scheint:

    [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]));
    }

Jetzt für die Fehler, die in dem Web-Client-Projekt (default.aspx.cs) in der Kompilierung auf:

    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 );

Ich habe auch versucht, über einfach diese eine Linie, die die letzten 2 Zeilen zu ändern:

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

... aber diese Änderung führt einen zweiten Fehler von dem Compiler, der als lautet:

Die beste überladene Methode Match für 'TRIMBrokerASMXProxy.ASMXProxy.FileService.UploadFile (byte [], string, long, TRIMBrokerASMXProxy.ASMXProxy.MetaData [])' hat einige ungültige Argumente

(die ursprünglichen Fehler beachten Sie über den zweiten Fehler „nicht konvertieren kann“).

Tut mir leid, so ausführliche oben zu sein. Hoffe, dass Sie helfen, Licht in diese Verwirrung vergießen kann.

War es hilfreich?

Lösung

Sie versuchen, eine Reihe von TRIMBrokerUtil.MetaData auf ein Array von TRIMBrokerASMXProxy.ASMXProxy.MetaData zuzuweisen. Denken Sie daran, dass die asp.net Proxy seine eigene Art erklärt.

Kopieren Sie einfach die Daten in ein neues Array mit dem Proxy-Typ.

Andere Tipps

Wenn Sie einen Verweis auf den Web-Service hinzufügen, wird Visual Studio automatisch Code für die Objekte erzeugen, die als Parameter an die Funktionen des Web-Services verwendet werden. Hier wird Ihre TRIMBrokerASMXProxy.ASMXProxy.MetaData Klasse kommt.

Dies ist nicht das gleiche wie Ihre TRIMBrokerUtil.MetaData Klasse. Sie können die Klasse von Ihrem TRIMBrokerUtil Namespace entfernen und nur den einen vom Proxy-Web-Service verwenden stattdessen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top