![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| ad12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.7.2010 Репутация: нет Всего: нет |
С Новым годом всех!
VS2010. Silverlight 4. C#. Silverlight браузерное приложение. Нужно создать файл на моём хосте. XDocument xdoc; Формирую xml документ: xdoc = new XDocument(new XElement("element1")); Затем пытаюсь записать его на свой хост в файл 1.xml: Uri url = new Uri("1.xml", UriKind.RelativeOrAbsolute); WebClient client = new WebClient(); client.OpenWriteCompleted += new OpenWriteCompletedEventHandler(client_OpenWriteCompleted); client.OpenWriteAsync(url, "POST"); //обработчик события void client_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e) { xdoc.Save((Stream)e.Result); } При исполнении файл 1.xml на временном локальном хосте не создаётся. Что-то не так? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 2 Всего: 118 |
ad12, а серверная часть где собственно сохранения?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ad12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.7.2010 Репутация: нет Всего: нет |
Прошу прощения - а какая серверная часть?
Разве WebClient'а недостаточно? WebClient, ведь, открывает поток для записи данных в ресурс url. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 2 Всего: 118 |
ad12, где вы такое прочитали? Он просто выполняет HTTP(s) запрос, и не более. Кто-то на сервере должен принять и обработать должным образом этот запрос иначе ничего не случится. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ad12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.7.2010 Репутация: нет Всего: нет |
jonie
Из справки MSDN: OpenWriteAsync - метод Silverlight Другие версии .NET Framework 4 .NET Framework 3.5 Открывает поток для записи данных в указанный ресурс |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 2 Всего: 118 |
ad12, ну пусть и так. А где вы прочитали что поток для записи должен записывать файл?
Вот тут я полноценно ответил на ваши вопросы http://forum.vingrad.ru/index.php?showtopi...t&p=2281675 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ad12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.7.2010 Репутация: нет Всего: нет |
Спасибо, jonie.
Попытаюсь разобраться. Пока что запустил Ваш солюшн в студии и при исполнении получил выговор: System.ServiceModel.CommunicationException не обработано пользовательским кодом Message=Произошла ошибка при попытке создать запрос к URI "http://localhost:2987/Service1.svc". Это могло быть вызвано попыткой междоменного доступа к службе без наличия приемлемой междоменной политики или с политикой, непригодной службам SOAP. Может понадобиться связаться с владельцем службы для публикации файла междоменной политики и убедиться в том, что она позволяет отправлять заголовки HTTP, связанные с SOAP. Эта ошибка также может быть вызвана использованием внутренних типов в прокси-сервере веб-службы без использования атрибута InternalsVisibleToAttribute. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 2 Всего: 118 |
ad12, ну настройки у вас при сборке которые вероятно не такие как у меня получаются. Проверяйте адрес на котором стартует asp.net developer server
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ad12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.7.2010 Репутация: нет Всего: нет |
jonie,
Отвлеку ещё немного. Всё тянет попроще сделать. Добавляю к проекту новый элемент - Web Service. Код службы может быть примерно такой: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Xml.Linq; namespace SilverlightApplication_1.Web { /// <summary> /// Сводное описание для WebService1 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // Чтобы разрешить вызывать веб-службу из скрипта с помощью ASP.NET AJAX, раскомментируйте следующую строку. // [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { XDocument xdoc = XDocument.Load("1.xml"); XElement xe = new XElement("HelloWorld"); xdoc.Element("persons").Add(xe); xdoc.Save("1.xml"); rerturn "Hello world"; } } } Генерирую прокси класс (как положено) ServiceReference1.WebService1SoapClient На главной форме приложения - кнопка button1 и textblock1 private void button1_Click(object sender, RoutedEventArgs e) { ServiceReference1.WebService1SoapClient web = new ServiceReference1.WebService1SoapClient(); web.HelloWorldCompleted += new EventHandler<ServiceReference1.HelloWorldCompletedEventArgs>(web_HelloWorldCompleted); web.HelloWorldAsync(); } void web_HelloWorldCompleted(object sender, ServiceReference1.HelloWorldCompletedEventArgs e) { textblock1.text = e.Result; } Кладу на хост файл 1.xml Запускаю приложение. Работает только Hello World С файлом 1.xml ничего не происходит. Почему? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 2 Всего: 118 |
ad12, потому что пишите вы файл черти-куда (а точнее в Windows\Microsoft.NET\ или что-то подобное). Это в свою очередь потому что у IIS стартовая директория не то где вы смотрите. Использовать надо нечто вроде:
чтобы разрешить виртуальный путь в реальный. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ad12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.7.2010 Репутация: нет Всего: нет |
Спасибо большое, jonie!
Работает. Ещё, может, подскажите. Вот метод у WebService - HelloWorld(). А как передать ему параметр? При вызове web.HelloWorldAsync(); ? Или как-то ещё? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 2 Всего: 118 |
такому методу никак - он не принимает у вас аргументов вообще же: HelloWorld(). Впишите аргументы, перегенерируйте прокси класс и они (аргументы) появятся в HelloWorldAsync-е -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ad12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.7.2010 Репутация: нет Всего: нет |
Не получается перегенерировать прокси класс.
"Возникла ошибка при загрузке метаданных с указанного адреса. Проверьте корректность введённого адреса" Адрес: http://localhost:50055/WebService1.asmx |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 2 Всего: 118 |
ad12, ну и что? Перейдите в браузере на
Адрес: http://localhost:50055/WebService1.asmx?wsdl и посмотрите есть ли эти самые секретные данные... и на сервере проставьте в web.config такое
Это сообщение отредактировал(а) jonie - 14.1.2011, 18:28 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ad12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.7.2010 Репутация: нет Всего: нет |
jonie,
ничего не получается. Попробую уточнить - над чем бьюсь. Я отлаживаю проект на локальном хосте, созданном VS2010, соответственно ASP.NET Development Server - Порт 50055 В свойствах проекта в разделе Веб->Серверы отмечено Использовать Visual Studio Development Server->Указанный порт 50055 В сгенерированном прокси-классе метод HelloWorld() - без параметров. Если я добавлю HelloWorld(XDocument _xdoc), то нужно перерегистрировать класс, так? Я пытаюсь "Добавить ссылку на службу", выбираю адрес http://localhost:50055/WebService1.asmx, пространоство имён предлагается новое ServiceReference2, давлю OK и получаю сообщение как в предыдущем моём посте... |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 2 Всего: 118 |
XDocument не является сериализующимся классом. Передавайте и возвращайте строки, которые парсите соотвествующим образом. И вообще пора бы использовать WCF. Старые ASMX сервисы устарели... Это сообщение отредактировал(а) jonie - 17.1.2011, 13:17 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ad12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.7.2010 Репутация: нет Всего: нет |
jonie, спасибо.
С WCF я разберусь. Сразу после asmx сервисов. Всё-таки, не могу понять - как передать параметр методу WebService'а (HelloWorld). В описание метода вставляю параметр - строку: public string HelloWorld(string _xdoc) { ... } В клиентской части следующий код: ServiceReference1.WebService1SoapClient web = new ServiceReference1.WebService1SoapClient(); web.HelloWorldCompleted += new EventHandler<ServiceReference1.HelloWorldCompletedEventArgs>(web_HelloWorldCompleted); web.HelloWorldAsync(); Куда тут поставить параметр? Пробую поставить web.HelloWorldAsync("Мой параметр"); - не получается |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |