Доступ к методу в прокси-классе (с помощью webservice в Visual Studio, C #)

#c# #web-services #visual-studio #proxy-classes

#c# #веб-службы #visual-studio #прокси-классы

Вопрос:

Я пытаюсь создать клиент веб-сервиса и получить доступ к веб-сервису с помощью # C в Visual Studio, но у меня есть некоторые проблемы с использованием прокси-классов, созданных из веб-сервиса.

Я пытаюсь получить доступ к методу в прокси-классе и отобразить значения, возвращаемые методом, на веб-странице.

Это класс, и метод, к которому я пытаюсь получить доступ, — RaceDaySimple[] raceDay:

 /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18408")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="java:se.atg.aisbean.calendar")]
public partial class RaceDayCalendarSimple : object, System.ComponentModel.INotifyPropertyChanged {

    private RaceDaySimple[] raceDayField;

    private AtgDateTime timestampField;

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute(IsNullable=true, Order=0)]
    /*Access this method ==>*/public RaceDaySimple[] raceDay {
        get {
            return this.raceDayField;
        }
        set {
            this.raceDayField = value;
            this.RaisePropertyChanged("raceDay");
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=1)]
    public AtgDateTime timestamp {
        get {
            return this.timestampField;
        }
        set {
            this.timestampField = value;
            this.RaisePropertyChanged("timestamp");
        }
    }

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName) {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}
  

В WebForm1.aspx.cs у меня есть это содержимое:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebServiceClient
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            InformationServiceReference.PartnerInfoServicePortClient pbs = new InformationServiceReference.PartnerInfoServicePortClient();
            pbs.ClientCredentials.UserName.UserName = "SomeUsername";
            pbs.ClientCredentials.UserName.Password = "SomePassword";

            test.InnerHtml = Convert.ToString(pbs.fetchRaceDayCalendarSimple().raceDay);

        }
    }
}
  

Этот метод вернет день гонки, и я пытаюсь отобразить его в WebForm1.aspx. Сначала я попробовал с:

 test.InnerHtml = pbs.fetchRaceDayCalendarSimple().raceDay;
  

Затем «pbs.fetchRaceDayCalendarSimple().raceDay;» подчеркнуто, поэтому я понимаю, что что-то не так. При наведении курсора мыши на него я получаю сообщение об ошибке:

 Cannot implicitly convert 'WebServiceClient.InformationServiceReference.RaceDaySimple[]' to 'String'
  

Поэтому я полагаю, что я должен сделать это вместо:

 test.InnerHtml = Convert.ToString(pbs.fetchRaceDayCalendarSimple().raceDay);
  

Итак, «test» — это идентификатор div на странице WebForm1.aspx:

 <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <h1>Test:</h1>
                <div id="test" runat="server"></div>
            </div>
        </form>
    </body>
</html>
  

Итак, при загрузке WebForm1.aspx отображается вот что:

Тест:
WebServiceClient.InformationServiceReference .RaceDaySimple[]

Отображается только имя метода, но я хочу, чтобы метод отображал то, что делает метод, а именно отображал день гонки. Итак, как мне это сделать?

Ответ №1:

Ошибка говорит о том, что вы получаете список RaceDaySimple, а не один элемент. Поэтому попробуйте использовать первый элемент в списке

 test.InnerHtml = pbs.fetchRaceDayCalendarSimple().FirstOrDefault().raceDay;
  

Комментарии:

1. Хорошо, но теперь я получаю сообщение об ошибке: ‘WebServiceClient. InformationServiceReference . RaceDayCalendarSimple’ не содержит определения для ‘FirstOrDefault’ и никакого метода расширения ‘FirstOrDefault’, принимающего первый аргумент типа ‘WebServiceClient. InformationServiceReference. Можно найти ‘RaceDayCalendarSimple’ (вам не хватает директивы using или ссылки на сборку?)

2. попробуйте добавить с помощью System.Linq; в начало файла. Другой вариант — изменить . FirstOrDefault() в [0]