Я создал серверный пользовательский элемент управления, который должен иметь возможность использовать 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 в своем веб-проекте, она прекрасно справится с веб-методом.
Любая помощь была бы замечательной
спасибо Джейсон