Модераторы: gambit, Kefir, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> silverlight запись файла с помощью WebClient 
:(
    Опции темы
ad12
Дата 11.1.2011, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 на временном локальном хосте не создаётся.
Что-то не так? 

PM MAIL   Вверх
jonie
Дата 11.1.2011, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



ad12, а серверная часть где собственно сохранения?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ad12
Дата 12.1.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.7.2010

Репутация: нет
Всего: нет



Прошу прощения - а какая серверная часть?
Разве WebClient'а недостаточно?
WebClient, ведь, открывает поток для записи данных в ресурс url.
PM MAIL   Вверх
jonie
Дата 12.1.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



Цитата


WebClient, ведь, открывает поток для записи данных в ресурс url. 

ad12, где вы такое прочитали? Он просто выполняет HTTP(s) запрос, и не более. Кто-то на сервере должен принять и обработать должным образом этот запрос иначе ничего не случится.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ad12
  Дата 12.1.2011, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.7.2010

Репутация: нет
Всего: нет



jonie
Из справки MSDN:

OpenWriteAsync - метод
Silverlight Другие версии  .NET Framework 4 .NET Framework 3.5 
Открывает поток для записи данных в указанный ресурс

PM MAIL   Вверх
jonie
Дата 12.1.2011, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



ad12, ну пусть и так. А где вы прочитали что поток для записи должен записывать файл?
Вот тут я полноценно ответил на ваши вопросы http://forum.vingrad.ru/index.php?showtopi...t&p=2281675


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ad12
Дата 13.1.2011, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.7.2010

Репутация: нет
Всего: нет



Спасибо, jonie.
Попытаюсь разобраться.

Пока что запустил Ваш солюшн в студии и при исполнении получил выговор:

System.ServiceModel.CommunicationException не обработано пользовательским кодом
  Message=Произошла ошибка при попытке создать запрос к URI "http://localhost:2987/Service1.svc". Это могло быть вызвано попыткой междоменного доступа к службе без наличия приемлемой междоменной политики или с политикой, непригодной службам SOAP. Может понадобиться связаться с владельцем службы для публикации файла междоменной политики и убедиться в том, что она позволяет отправлять заголовки HTTP, связанные с SOAP. Эта ошибка также может быть вызвана использованием внутренних типов в прокси-сервере веб-службы без использования атрибута InternalsVisibleToAttribute. 

 smile
PM MAIL   Вверх
jonie
Дата 13.1.2011, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



ad12, ну настройки у вас при сборке которые вероятно не такие как у меня получаются. Проверяйте адрес на котором стартует asp.net developer server


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ad12
Дата 13.1.2011, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 ничего не происходит. Почему?

PM MAIL   Вверх
jonie
Дата 13.1.2011, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



ad12, потому что пишите вы файл черти-куда (а точнее в Windows\Microsoft.NET\ или что-то подобное). Это в свою очередь потому что у IIS стартовая директория не то где вы смотрите. Использовать надо нечто вроде:
Код

        string appDataPath = HttpContext.Current.Server.MapPath("~/App_Data/Example.xml");

чтобы разрешить виртуальный путь в реальный.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ad12
Дата 14.1.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.7.2010

Репутация: нет
Всего: нет



Спасибо большое, jonie!
Работает.

Ещё, может, подскажите.
Вот метод у WebService - HelloWorld().
А как передать ему параметр?
При вызове web.HelloWorldAsync(); ?
Или как-то ещё?

PM MAIL   Вверх
jonie
Дата 14.1.2011, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



Цитата(ad12 @  14.1.2011,  12:58 Найти цитируемый пост)
Вот метод у WebService - HelloWorld().
А как передать ему параметр?
При вызове web.HelloWorldAsync(); ?
Или как-то ещё?

такому методу никак - он не принимает у вас аргументов вообще же: HelloWorld().
Впишите аргументы, перегенерируйте прокси класс и они (аргументы) появятся в HelloWorldAsync-е


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ad12
Дата 14.1.2011, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.7.2010

Репутация: нет
Всего: нет



Не получается перегенерировать прокси класс.
"Возникла ошибка при загрузке метаданных с указанного адреса.
Проверьте корректность введённого адреса"


Адрес: http://localhost:50055/WebService1.asmx  smile 
PM MAIL   Вверх
jonie
Дата 14.1.2011, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



ad12, ну и что? Перейдите в браузере на 
Адрес: http://localhost:50055/WebService1.asmx?wsdl и посмотрите есть ли эти самые секретные данные... и на сервере проставьте в web.config такое
Код

<serviceBehaviors>
   <behavior name="EmployeeManager_Behavior">
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <serviceMetadata httpGetEnabled="true" />
   </behavior>
</serviceBehaviors>
чтобы видеть всё из ошибки

Это сообщение отредактировал(а) jonie - 14.1.2011, 18:28


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ad12
Дата 17.1.2011, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 и получаю сообщение как в предыдущем моём посте...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0755 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.