добавление веб-методов в настраиваемый серверный элемент управления

Я создал серверный пользовательский элемент управления, который должен иметь возможность использовать WebMethod. Если веб-метод находится в моем основном приложении (в виде файла ASMX), он работает нормально. Проблема в том, что я хочу включить этот метод в ту же библиотеку проекта, что и пользовательский элемент управления, чтобы я мог распространять DLL как отдельный проект. Поскольку проект представляет собой библиотеку классов, мне пришлось сделать веб-службу файлом VB вместо .ASMX. Когда я пытаюсь вызвать веб-метод в моем .VB файле, кажется, что ничего не происходит (ошибок нет, но точка останова на моем веб-методе никогда не достигается). Можно ли это сделать? Ниже приведен пример того, как я создал свой элемент управления:

Веб-метод в myClass.VB:

 <System.Web.Script.Services.ScriptService()> _
 <WebService(Namespace:="http://tempuri.org/")> _
 <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _     
 Public Class myClass
     Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function TestMethod(ByVal prefixText As String) As String
    return "Hello World"
end Function

и мои серверные элементы управления настроены следующим образом в miniActiveDirectorySearch.VB:

Public Class miniActiveDirectorySearch
 Inherits WebControl
   Private Sub attachWebResources()  
     ScriptManager.RegisterClientScriptResource(Me, Me.GetType, "myScripts.js")
     ScriptManager.RegisterClientScriptResource(Me, Me.GetType, "jquery-1.4.1.min.js")
   End Sub
    Protected Overrides Sub CreateChildControls()
        createDynamicControls()
        MyBase.CreateChildControls()
    End Sub
    Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
        attachWebResources()
        MyBase.OnInit(e)
    End Sub
    Private Sub createDynamicControls()
        Controls.Clear()

        Try
            tblMainLayout = buildMaintable() 'builds out the control
            'to save space, I removed how this works.  But, it creates a textbox that
            'has a onKeyPress Event.  When the user hits return, it calls the jQuery
            'function serviceCall
            Controls.Add(tblMainLayout)
        Catch ex As Exception
            Throw New ApplicationException("Exception Occurred", ex.InnerException)
        End Try
    End Sub
 end Class

и мой метод JQuery, найденный в myScripts.js:

function serviceCall(getText, tbId, divId, bgColor) {
   $.ajax({
    type: "POST",
    url: 'myClass.asmx/TestMethod',
    data: '{"prefixText":"'some test'"}',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
       alert('Success')           
    },
    error: function (e) {
         alert('Error')   
    }
});

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

Любая помощь была бы замечательной

спасибо Джейсон


person jason    schedule 23.04.2013    source источник


Ответы (1)


Извините, но если вы используете старую технологию ASMX, вы застряли при использовании файлов ASMX. С другой стороны, вы можете сделать это с помощью WCF.

person John Saunders    schedule 23.04.2013
comment
Как этого добиться в WCF? Это то, что потребует изменений в IIS? Я как бы зациклен на некоторых вещах. - person jason; 23.04.2013
comment
Без изменений в IIS. WCF поддерживает самостоятельный хостинг. Я делаю это прямо сейчас - у меня есть служба WCF JSON, размещенная в части моего веб-приложения. - person John Saunders; 23.04.2013
comment
Да, но моего кода нет в веб-приложении. Могу ли я включить WCF в библиотеку классов и использовать серверный элемент управления в этой библиотеке? - person jason; 23.04.2013
comment
Ой, я забыл. Да, ты можешь это сделать. Вам понадобится статический конструктор для вашего класса управления, на котором будет размещена служба WCF. См. Хостинг в управляемом приложении - person John Saunders; 23.04.2013