#c# #asp.net #web-services
#c# #asp.net #веб-службы
Вопрос:
Я использую ASP.NET приложение с веб-службой, и по какой-то причине один из методов веб-службы пропускается. Я уверен, что это довольно простая проблема, но она поставила меня в тупик более чем на день. Я помещаю вызов метода в неправильный метод, я бы предположил, что OnPreRender обработает все до завершения загрузки страницы. Я довольно уверен, что проблема в этой области, если я установлю для ImageLoc объекта формы URL-адрес, когда он создается, он загружается в ASP.NET страница в порядке.
Я не думаю, что я пропустил какой-либо соответствующий код, но если вам нужно увидеть что-нибудь еще, дайте мне знать. Объект form — это всего лишь несколько свойств с get / set, поэтому я его опустил. Также, пожалуйста, обратите внимание, что строковые параметры будут изменены на что-то другое, я просто пытаюсь настроить основную работу.
.aspx.cs :
localhost.MobileFormServices wsMobile = new localhost.MobileFormServices();
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
//Call the web service to pass image URL
wsMobile.NewForm("parameters");
FormImage.ImageUrl = wsMobile.FormProperties().ImageLoc;
}
методы веб-службы:
//new form object instance
private FormLibrary.Form form = new FormLibrary.Form();
//adds the image location to the form object
[WebMethod]
public void NewForm(String parameters)
{
form.ImageLoc = "http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg"; //breakpoint here, never hit
}
[WebMethod]
public FormLibrary.Form FormProperties()
{
return this.form;
}
Ответ №1:
Вы уверены, что веб-служба не вызывается? Вызов
FormImage.ImageUrl = wsMobile.FormProperties().ImageLoc;
хотя на вашей странице используется тот же экземпляр объекта, на стороне веб-службы вызывается совершенно другой экземпляр, чем при использовании метода
wsMobile.NewForm("parameters");
был вызван. Из-за этого
private FormLibrary.Form form = new FormLibrary.Form();
вызывается при каждом вызове веб-службы.
При каждом вызове веб-службы создается новый экземпляр веб-службы, обрабатывающей вызов. Итак, в вашем примере.
-
wsMobile.NewForm(«параметры») — новая библиотека FormLibrary.Форма создается при создании экземпляра, обрабатывающего этот вызов.
-
в этом вызове вы задаете форму.ImageLoc — но эта форма локальна для этого экземпляра
-
FormImage.ImageUrl = wsMobile.FormProperties().ImageLoc; — снова новая библиотека FormLibrary.Форма создается, например, для обработки этого вызова
-
вы возвращаете ImageLoc новой созданной FormLibrary.Form. Не то, что вы установили ранее.
Комментарии:
1. Для меня это имеет смысл, но как бы вы порекомендовали это исправить?
2. Я немного подумал, будет ли передача объекта формы в asp.net приложение, использующее / модифицирующее его, а затем передающее его обратно через веб-службу, устраняет это? Я собираюсь попробовать это сейчас.
3. Вы можете сохранить FormLibrary. Форма как статическая, но это приведет к тому, что все страницы будут иметь одинаковую форму, что, вероятно, плохо, но зависит от каждого проекта. Другой способ — сохранить его в сеансе или в каком-либо внешнем хранилище, таком как база данных. Или, если вы действительно используете два вызова в своем приложении, может быть, вам следует сделать это одним? В этом примере второй вызов не имеет смысла. Первый вызов должен вернуть то, что вам нужно. Если вы считаете этот ответ полезным, пожалуйста, поддержите 🙂
Ответ №2:
Можете ли вы попробовать использовать событие OnPreRenderComplete вместо OnPreRender.
Комментарии:
1. Пробовал это, возникла та же проблема.
Ответ №3:
Иногда отладчик путается. Попробуйте это (и выполните перестройку всего):
[WebMethod]
public void NewForm(String parameters)
{
System.Diagnostics.Debugger.Break();
form.ImageLoc = "http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg"; //breakpoint here, never hit
}
Комментарии:
1. Все еще не доходит до here, так что это означает, что он определенно не вызывается?
2. Вы получаете сообщение об ошибке? Вы убедитесь, что IIS выключен и перезапущен (или что это вообще за сервер) между тестами? Попробуйте удалить и повторно добавить прокси.
3. Сообщения об ошибке нет, в основном я собираюсь использовать веб-службу для доступа к некоторым изображениям, сгенерированным другой программой (еще не созданным, поэтому я использую случайное изображение). Я пытаюсь передать это изображение в мой asp.net приложение для его отображения. Я попытался перезапустить сервер, который я использую. Вы имеете в виду прокси-класс? Я тоже пробовал это. Я немного почитал и подумал, что это, возможно, проблема с синтаксическим анализом xml, возникающая при передаче объектов из веб-сервисов, но решение для этого ничего не изменило для меня (удаление класса form в прокси и добавление с помощью FormLibrary)
Ответ №4:
Попробуйте переместить свой код OnPreRender () в OnInit().
Комментарии:
1. Изменений нет, по-прежнему пропускается точка останова и выполняется не так, как ожидалось.
2. Почему это должно что-то изменить?