powered by simpleCommunicator - 2.0.46     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF сервис не возвращает список
6 сообщений из 6, страница 1 из 1
WCF сервис не возвращает список
    #37726615
Zasalamel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Суть проблемы в следующем.
есть такой WCF сервис который я использую в Silverlight 4 проекте(LibW моя собственная библиотека с интерфейсом IWeather и классами Current_Weather и Forecast_weather)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using LibW;

[ServiceContract(Namespace = "")]
[SilverlightFaultBehavior]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class AllInOne
{
	[OperationContract]
	public void DoWork()
	{
		// Add your operation implementation here
		return;
	}

	private List<LibW.IWeather> returner = new List<LibW.IWeather>();
	/// <summary>
	/// method set connection to google and get xml document weather for there
	/// </summary>
	/// <param name="city">city for which find weather</param>
	/// <param name="lang">lang of text</param>
	/// <returns>return either "finish if all successful or Exception msg or errors with city finding and error with connection</returns>
	[OperationContract]
	public string MainMethod(string city, string lang)
	{
		//check connection
		Ping p = new Ping();
		PingReply pr = p.Send(@"google.com");
		IPStatus status = pr.Status;
		if (status != IPStatus.Success)
			return "Error with Connection";
		//try tp get xml weather
		try
		{
			XElement el;
			HttpWebRequest req =
				(HttpWebRequest) WebRequest.Create("http://www.google.com/ig/api?weather=" + city + "&hl=" + lang);
			HttpWebResponse resp = (HttpWebResponse) req.GetResponse();
			StringBuilder sb = new StringBuilder();
			using (StreamReader streamreader = new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding(1251)))
			{
				el = XElement.Load(streamreader);
			}
			int addv = 0;
			var v = from c in el.Elements()
					select c;
			//int i = 0;
			Current_Weather obj=new Current_Weather();
			Forecast_Weather obj1=new Forecast_Weather();
			foreach (var drk in v)//все что по тегом
			{
				//получены список тегов
				//просмотр значений по тегов
				foreach (var xk in drk.Elements())
				{
					if (xk.Name == "problem_cause")
						return "such city on language doesn't exist";
					if (xk.Name == "current_conditions")
					{
						foreach (var xxk in xk.Elements())
						{
							if (xxk.Name == "condition")
								obj.GetCondition = xxk.Attribute("data").Value;
							else if (xxk.Name == "temp_f")
								obj.TEMP_F = int.Parse(xxk.Attribute("data").Value);
							else if (xxk.Name == "temp_c")
								obj.TEMP_C = int.Parse(xxk.Attribute("data").Value);
							else if (xxk.Name == "humidity")
								obj.GetHumidity = xxk.Attribute("data").Value;
							else if (xxk.Name == "wind_condition")
								obj.GetWindCondition = xxk.Attribute("data").Value;
							else{}
						}
						returner.Add(obj);
					}
					else if (xk.Name == "forecast_conditions")//несколько forecastov
					{
						//Console.WriteLine("foreacast " + i);
						foreach (var xxk in xk.Elements())
						{
							if (xxk.Name == "low")
								obj1.GetLowT = int.Parse(xxk.Attribute("data").Value);
							else if (xxk.Name == "high")
								obj1.HighT = int.Parse(xxk.Attribute("data").Value);
							else if (xxk.Name == "condition")
								obj1.GetCondition = xxk.Attribute("data").Value;
							else{}
						}
						returner.Add(obj1);
						//i++;
					}
					else { }
				}
			}
			return "finish";
		}
		catch (Exception exc)
		{
			return exc.Message;
		}
	}

	/// <summary>
	/// return list of weather fot 4 days
	/// </summary>
	/// <returns>list</returns>
	[OperationContract]
	public List<IWeather> Final()
	{
		return this.returner;
	}
}


Сервис в методе MainMethod() заполняет список Returner объектами и возвращает "finish" в случае успеха.
В приложении список того же типа cont должен принимать список returner в методе mainobj_FinalCompleted().
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
public partial class MainPage : UserControl
	{
		AllInOneClient mainobj=new AllInOneClient();
		List<LibW.IWeather> cont=new List<LibW.IWeather>();
		public MainPage()
		{
			InitializeComponent();
	        label2.Content = "en";
			textBox1.Text = "Minsk";
			this.Reload();
		} 

		private void mainobj_MainMethodCompleted(object sender,MainMethodCompletedEventArgs e)
		{
			if (e.Error != null)
				MessageBox.Show("Some error occured!Please reload");
			else
			{
				if (e.Result != "finish")
					MessageBox.Show(e.Result);
				else
				{
					mainobj.FinalCompleted+=new EventHandler<FinalCompletedEventArgs>(mainobj_FinalCompleted);
					mainobj.FinalAsync();
				}
			}
		}

		private void mainobj_FinalCompleted(object sender, FinalCompletedEventArgs e)
		{
			if (e.Error != null)
				MessageBox.Show("Some error occured!Please reload");
			else
			{
				cont = e.Result.Cast<LibW.IWeather>().ToList();
			}
		}


НО!Не возвращает метод Final ничего.
Я проверял в дебаггере ставя точки останова. Когда происходит вызов метода Final() почему то список заполненный в методе MainMethod() обнуляется. В чем причина?
...
Рейтинг: 0 / 0
WCF сервис не возвращает список
    #37727676
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zasalamel,

а какой у вас тип службы? сеансовый или как?
...
Рейтинг: 0 / 0
WCF сервис не возвращает список
    #37728262
Zasalamel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
netivanZasalamel,

а какой у вас тип службы? сеансовый или как?

в смысле тип?я просто добавил silverligh enabled WCF сервис через add new item к своему проекту, а потом просто подключил его через Add service reference.
...
Рейтинг: 0 / 0
WCF сервис не возвращает список
    #37730294
Zasalamel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
похоже придется использовать XML сериализацию и сразу в MainMethod возвращать строку XML
...
Рейтинг: 0 / 0
WCF сервис не возвращает список
    #37732178
Ekstrem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zasalamel,

простите что не отвечал долго.

У меня с другим разработчиком разделение труда: я делаю backend, а тот должен был silverlight приложение... но что-то он его не осилил. Вот я ищу способ упростить его труд, не делая свою работу заново (или не делая его работы).
Ну дык вот.
Привязка у меня webHttpBinding. WebGetAttribute то же на месте. Или я дурак, или скрипт не правельный, но уточнить любую часть вполне могу.

Печально, но js не вернул ничего даже из GET-запроса левого сайта он ничего не вернул...
...
Рейтинг: 0 / 0
WCF сервис не возвращает список
    #37732797
Zasalamel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почти решил проблему по другому. через установку InstanceContextMode.

правда это вызывает другую ошибку.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF сервис не возвращает список
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]