1

我創建了一個服務器用戶控件,我希望它能夠使用WebMethod。如果Web方法在我的主應用程序(作爲ASMX文件),它工作正常。問題是我想將此方法包含在與用戶控件相同的項目庫中,以便我可以將DLL作爲獨立項目進行分發。因爲該項目是一個類庫,所以我必須使Web服務成爲VB文件,而不是.ASMX。當我嘗試在我的.VB文件中調用Web方法時,似乎沒有任何事情發生(沒有錯誤,但我的Web方法中的斷點從未達到)是否可以實現?下面是我如何創建我的控制爲例:將web方法添加到自定義服務器控件

Web方法,在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') 
    } 
}); 

我已經創建的服務CL並將其包含在與我的用戶控件相同的項目中,但該服務從未被調用。另一方面,如果我將服務放在我的web項目的ASMX文件中,它將會很好地到達web方法。

任何幫助將是巨大的

感謝 傑森

回答

0

很抱歉,但如果你使用舊的ASMX技術,那麼你正在使用ASMX文件卡住。另一方面,你可以用WCF來做到這一點。

+0

這將如何在WCF中完成?這是否需要更改IIS?我對某些東西感興趣。 – jason 2013-04-23 15:32:04

+0

對IIS沒有更改。 WCF支持自主託管。我現在就這樣做 - 我的Web應用程序的一部分託管了WCF JSON服務。 – 2013-04-23 17:51:25

+0

是的,但我的代碼不在Web應用程序中。我可以將WCF包含在類庫中,並且該庫中的服務器控件會使用它嗎? – jason 2013-04-23 18:01:23

相關問題