Pregunta

Estoy tratando de pasar una matriz de un objeto simple a un servicio web y realmente me pegan en este error durante la compilación de mi proyecto del cliente web:

No se puede convertir implícitamente el tipo 'TRIMBrokerUtil.MetaData []' a 'TRIMBrokerASMXProxy.ASMXProxy.MetaData []'

Aquí está mi proyecto "utilidad" compilado en 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;
        }
    }
    }

A continuación se muestra un fragmento del servicio web que también compila bien:     usando TRIMBrokerUtil;     TRIMBrokerService espacio de nombres     {         [WebService (Namespace = " http://tempuri.org/ ")]         [WebServiceBinding (ConformsTo = WsiProfiles.BasicProfile1_1)]         [ToolboxItem (false)]         FileService clase pública: System.Web.Services.WebService         {

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

... y su uso posterior como esto:

Update update = BuildMetaData(metaDataArray);

... y esto:

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

A continuación, (a través de "Agregar referencia Web") tengo mi clase de proxy para el servicio web ASMX en un proyecto separado y se compila sin problema. Dentro del archivo reference.cs generada Me parece bien que parece:

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

Ahora, para el error que se produce en la compilación en el proyecto de cliente 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 );

También he intentado cambiar las 2 últimas líneas arriba para simplemente esta línea:

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

... pero ese cambio introduce un segundo de error del compilador que dice así:

El partido mejor método sobrecargado para 'TRIMBrokerASMXProxy.ASMXProxy.FileService.UploadFile (byte [], cuerda, larga, TRIMBrokerASMXProxy.ASMXProxy.MetaData [])' tiene algunos argumentos no válidos

(tenga en cuenta el error original de "no se puede convertir" es el segundo error).

Lo siento por ser tan detallado anteriormente. Esperamos que usted puede ayudar a arrojar luz sobre esta confusión.

¿Fue útil?

Solución

Usted está tratando de asignar un conjunto de TRIMBrokerUtil.MetaData a una serie de TRIMBrokerASMXProxy.ASMXProxy.MetaData. Recuerde que el proxy asp.net declara su propio tipo.

Sólo copia los datos en una nueva matriz con el tipo de proxy.

Otros consejos

Cuando se agrega una referencia al servicio Web, Visual Studio generará automáticamente el código para los objetos que se utilizan como parámetros a las funciones del servicio web. Aquí es donde su clase TRIMBrokerASMXProxy.ASMXProxy.MetaData viene.

Esto no es lo mismo que su TRIMBrokerUtil.MetaData clase. Puede eliminar la clase de su TRIMBrokerUtil espacio de nombres y sólo tiene que utilizar el del proxy de servicio web en lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top