الخلط في C # صفيف من الكائنات ونوع التحويل الضمني

StackOverflow https://stackoverflow.com/questions/667619

سؤال

وأنا أحاول لتمرير مجموعة من كائن بسيط لخدمة الويب وأنا عالقة حقا على هذا الخطأ أثناء الترجمة من المشروع العميل الويب الخاص بي:

لا يمكن تحويل ضمنيا نوع 'TRIMBrokerUtil.MetaData []' إلى 'TRIMBrokerASMXProxy.ASMXProxy.MetaData []'

وهنا هو بلدي مشروع "فائدة" جمعت في 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;
        }
    }
    }

وهنا مقتطف من خدمة الإنترنت الذي يجمع أيضا على ما يرام:     باستخدام TRIMBrokerUtil.     مساحة TRIMBrokerService     {         [خدمة ويب (النطاق = " http://tempuri.org/ ")]         [WebServiceBinding (ConformsTo = WsiProfiles.BasicProfile1_1)]         [ToolboxItem (كاذبة)]         FileService الطبقة الجمهور: System.Web.Services.WebService         {

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

... والاستخدام في وقت لاحق كما يلي:

Update update = BuildMetaData(metaDataArray);

... وهذا:

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

وبعد ذلك، (عن طريق "إضافة مرجع ويب") لدي فئة وكيل لخدمة ويب ASMX في مشروع منفصل وذلك برمجيا دون مشكلة. داخل ملف reference.cs لدت أجد هذا الذي يبدو موافق:

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

والآن لالخطأ الذي يحدث في تجميع في المشروع العميل على شبكة الإنترنت (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 );

ولقد حاولت أيضا تغيير خطوط الأخيرة (2) أعلاه لمجرد هذا سطر واحد:

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

و... ولكن هذا التغيير يدخل خطأ 2ND من المترجم الذي يقرأ على النحو التالي:

وانتهت المباراة طريقة أفضل طاقتها ل"TRIMBrokerASMXProxy.ASMXProxy.FileService.UploadFile (بايت []، سلسلة، منذ فترة طويلة، TRIMBrokerASMXProxy.ASMXProxy.MetaData [])" لديها بعض الحجج الباطلة

و(لاحظ الخطأ الأصلي حول "لا يمكن تحويل" هو خطأ 2ND).

وعذرا عن ذلك يجري مطول أعلاه. آمل أن تتمكن من مساعدة تسليط الضوء على هذا الارتباك.

هل كانت مفيدة؟

المحلول

وأنت تحاول تعيين مجموعة من TRIMBrokerUtil.MetaData إلى مجموعة من TRIMBrokerASMXProxy.ASMXProxy.MetaData. تذكر أن وكيل asp.net يعلن نوع خاص بها.

ومجرد نسخ البيانات إلى مجموعة جديدة مع نوع الوكيل.

نصائح أخرى

عند إضافة مرجع إلى خدمة ويب، والبصرية ستوديو إنشاء التعليمات البرمجية للكائنات التي تستخدم كمعلمات على وظائف لخدمة الويب تلقائيا. هذا هو المكان الذي يأتي من الدرجة TRIMBrokerASMXProxy.ASMXProxy.MetaData من.

وهذه ليست هي نفسها من الطبقة TRIMBrokerUtil.MetaData الخاص بك. يمكنك إزالة الطبقة من مساحة TRIMBrokerUtil ومجرد استخدام واحدة من وكيل خدمة الويب بدلا من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top