Я так смущен. Хотя у меня есть хороший опыт работы на C#, это мой первый контакт с WCF.Получить данные из WCF
У меня есть настольное приложение C#, которое выполняет несколько функций, таких как получение данных из локального xml-файла и другие различные функции, которые мне не нужно объяснять здесь, потому что они не связаны с этим вопросом. Теперь мне нужно использовать URL-адрес службы WCF для получения некоторых других данных, которые будут использоваться в моем приложении.
Чем больше я читал о WCF в Интернете и просматриваю учебники, тем больше я смущаюсь. Вот почему я прошу очень простой, ясный, прямой ответ на мои вопросы здесь. Я не ищу ничего необычного или продвинутого, как создание WCF Service Library или приложения WCF Service Application. Я просто новичок в WCF, который хочет использовать URL-адрес службы WCF в моем существующем настольном приложении C# для получения некоторых данных. Служба WCF была предоставлена мне кем-то еще и правильно работает. Пожалуйста, имейте в виду, отвечая на этот вопрос, что я новичок в WCF, поэтому лучше ответить на этот вопрос на уровне начинающих.
Это то, что я до сих пор дон:
- Создано C# Windows Forms приложение, которое правильно строит и работает. Приложение имеет несколько пользовательских классов, локальный XML-файл для извлечения данных и некоторые обработчики событий для щелчков кнопок и т. Д. В классе Form1.
- Я добавил ссылку на службу WCF для моего проекта (то есть, щелкните правой кнопкой мыши проект> Add Service Reference> вставить в URL> Go> Ok.
- Добавлена
System.Data.Services.Client
ссылка на мой проект. Хотя я не знаю, . это даже необходимо - В моем классе Form1, где обработчики событий, я добавил следующие с помощью директив:
using MyProject.theService
иusing System.Data.Services.Client
добавлен этих глобальных переменных в начале класса Form1:.
private Uri svcUri = new Uri("http://www ... service.svc");
private ServiceClient context;В классе Form1, в случае кнопки, у меня есть следующий код:
-
private void btnWebService_Click(object sender, EventArgs e)
{
ServiceClient client = new ServiceClient();
Student s = new Student();
// this is implemented as follows in the student class: public Fee[] Fees { get; set; }
Fee f = new Fee();
// need some logic here to get the data using the client object
client.Close();
}
Там есть метод объекта клиента под названием GetFees (client.GetFees()
) и я Предполагая, что это самый логичный выбор, чтобы использовать этот метод для получения необходимых мне данных (это плата, взимаемая со студентами). Visual Studio дает следующее описание метода:
theService.Student[] ServiceClient.GetFees(theService.Student[] students)
То, что я хотел, когда я нажимаю на кнопку и запустить событие btnWebService_Click, я называю обслуживание, получить необходимые данные, сохраните его в соответствующем объект, а также использовать данные, которые мне нужны.
Мой вопрос являются:
- На шаге 6, я двигаюсь в правильном направлении?
- Я пропустил какие-либо шаги, чтобы сделать вызов WCF?
- Метод GetFees() меня смущает. Как написать правильный код C#, чтобы использовать его без ошибок?
Я пытался писать эту строку кода в обработчик событий:
f = client.GetFees(s.Fees[0]);
Но я получаю следующие ошибки в Visual Studio:
- Лучший перегружен матч метод " MyProject.theService.ServiceClient.GetFees (MyProject.theService.Student []) 'имеет некоторые недопустимые аргументы
- Аргумент 1: невозможно преобразовать из' MyProject.Fee 'в' MyProject.theService.Student [] '
Что я здесь делаю неправильно? Или эта линия даже близко ко всему, что мне нужно?
Я целенаправленно исключил полный URL-адрес службы WCF из этого вопроса. Если это поможет ему правильно ответить на этот вопрос, пожалуйста, дайте мне знать, и я дам его вам. Кроме того, есть URL-адрес wsdl. Дайте мне знать, если это поможет вам ответить на мои вопросы.
Благодарим вас за то, что прочитали все это. Я приветствую и ценю любую помощь, которую вы можете предоставить.
------------------------- РЕДАКТИРОВАТЬ ------------------- ------
Основываясь на некоторой помощи, которую я получил, я очень близко к решению. Но у меня все еще есть одна проблема.
Этот код компилируется и работает:
private void btnWebService_Click(object sender, EventArgs e)
{
ServiceClient client = new ServiceClient();
theService.Student s = new theService.Student();
theService.Student[] stds = new theService.Student[30];
stds[0] = s;
var ret = client.GetFees(stds);
client.Close();
}
Однако, я получаю следующее сообщение об ошибке из Visual Studio:
- Invalid StudentID (= 0). StudentID должен быть больше 0.
Эта ошибка возникает из-за того, что значения в stds[0]
являются нулевыми.
В другой части моей программы у меня есть запрос LINQ, который захватывает данные студента из xml-файла и сохраняет его в объекте List<Student> students
.
Итак, следующим образом, следующий шаг должен был бы присвоить значения от students
до stds[0]
. Проблема , которую я не могу понять, - это проблема с кастингом или преобразованием. Как назначить объекты-ученики из списка объектуService.Student [], чтобы я мог предоставить службе некоторые данные для поиска?
Я попытался сделать это:
stds[0] = (theService.Student)students[0];
Но, конечно, я получаю эту ошибку:
- Не может неявно преобразовать тип 'MyProject.Student' до «MyProject.theService.Student '
Я знаю, что это может показаться очень простым и очевидным для некоторых, но я не могу понять это. Я не могу найти ответ в Google. Кто-то, пожалуйста, помогите.
Какова цель WCF в вашем приложении? WCF, насколько я знаю, это Windows Communication Foundation. это означает, что вы используете его для связи между двумя процессами, работающими как локально, так и локально и одним удаленным. – ilansch
WCF позволяет мне «получать плату, связанную со студентами». Другими словами, я могу использовать его для захвата некоторых данных из удаленного источника. Мне предоставлен URL-адрес WCF, и теперь мне нужно использовать его в своем приложении для получения данных. Создание соединения и получение данных - запутанная часть. Как только я получу данные, я могу делать все, что захочу. Например, я мог бы отображать данные в списке, если захочу. Итак, цель WCF в моем приложении - получить некоторые данные. Это помогает? – Zolt
Ошибка довольно проста: вы отправляете 'MyProject.Fee', когда вы должны отправлять' MyProject.theService.Student [] '. – zimdanen