2010-04-03 6 views
1

У меня есть библиотека классов. В одном из классов, я добавляю ссылку скрипта на странице, как это:Как добавить ServiceReference во встроенный файл?

protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 
     if (this.Page != null) 
     { 
      ScriptManager sm = ScriptManager.GetCurrent(this.Page); 
      ServiceReference reference = new ServiceReference("~/Admin/Services/ContactsService.asmx"); 
      reference.InlineScript = true; 
      sm.Services.Add(reference); 
     } 
    } 

Для пути к файлу ServiceReference, есть способ, чтобы добавить вложенный файл, а? Я хочу сохранить все самодостаточным в своей библиотеке классов вместо того, чтобы отбрасывать файл в папку веб-сайта.

+0

Веб-служба должна существовать, то есть быть доступной по URL-адресу, поэтому вы не можете просто вставлять файл .asmx и использовать для этого доступ к ресурсам. Вы пытаетесь ссылаться на службу в своей собственной библиотеке, если это так, добавьте регулярную ссылку на нее, а не через веб-службы. –

+0

Он находится в той же библиотеке, но мне нужно вызвать WebMethod через Javascript. Можно ли добавить регулярную ссылку (не уверен, что вы имеете в виду)? Кроме того, я знаю, что он должен существовать через настоящий URL-адрес, поэтому я не могу сделать что-то вроде этого: новый ServiceReference (Page.ClientScript.GetWebResourceUrl (this.GetType(), "MyLibrary.Services.FormsService.asmx")) Ошибка говорит, что она не поддерживается, но, возможно, я делаю что-то неправильно. – TruMan1

+0

Возможно, у меня немного над головой, но вы можете определить [WebMethods] в ваших .aspx-файлах и вызвать их из javascript. Проверьте эту ссылку для получения информации - http://www.dotnetcurry.com/ShowArticle.aspx?ID=109. Таким образом вы можете сохранить все это на странице, которую вы создаете, или на странице, где вы используете свою библиотеку. –

ответ

0

Если я правильно понимаю, что вы просите, это будет невозможно, потому что WebService является фактическим скомпилированным классом, а WebMethod является фактическим скомпилированным методом.

Метод GetWebResourceUrl делает то, что подразумевает название, возвращает ресурс. Клиентский скрипт (Javascript) - это всего лишь строковый ресурс, он не должен быть выполнен на на сервере, он просто отправляется клиенту в виде текста. Веб-сервисы (и их методы) должны иметь физическую конечную точку, способную отвечать на запросы клиентов и выполнять этот код.

Теоретически, если вы использовали WCF, вы можете определить URL-адрес конечной точки службы во время выполнения, поскольку WCF отделяет конечную точку от поведения и определяет ее в определенном месте в вашем web.config. Это не позволит вам предоставить всю «услугу» как WebResource, но это позволит избежать необходимости жесткого кодирования URL-адреса. Если вы используете ASMX WebServices, у вас даже нет этой опции, потому что ASMX использует файл разметки, похожий на страницу ASP.NET.

Если вы обеспокоены тем, что URL-адрес может измениться, т. Е. Потому что вы развертываете этот веб-сайт на нескольких серверах/доменах, лучше всего сделать внешний вид URL-адреса в качестве параметра приложения. Таким образом вам нужно будет только отредактировать файл web.config, чтобы изменить, какой URL-адрес используется для ссылки на скрипт.

Смежные вопросы