在Web应用程序中从js调用Web服务

时间:2012-12-07 12:09:41

标签: javascript wcf web-services web-applications scriptmanager

我创建了一个简单的web方法,用于使会话保持活动状态:

Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web

<ServiceContract(Namespace:="PMWebService")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class WebService

' To use HTTP GET, add <WebGet()> attribute. (Default ResponseFormat is WebMessageFormat.Json)
' To create an operation that returns XML,
'     add <WebGet(ResponseFormat:=WebMessageFormat.Xml)>,
'     and include the following line in the operation body:
'         WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"
<OperationContract()>
Public Shared Function KeepSessionAlive() As Integer

    'Keep the session alive by writing to a session variable
    HttpContext.Current.Session("KeepSessionAlive") = DateTime.Now
    'Give the user time to keep the session alive
    Dim iSecondsToKeepAlive As Integer = 50
    'Set the timeout before the 'keep alive' message is displayed
    Dim iTimeout As Integer = (HttpContext.Current.Session.Timeout * 60000) - (iSecondsToKeepAlive * 1000)
    Return iTimeout

End Function

' Add more operations here and mark them with <OperationContract()>

End Class

我的scriptmanager定义如下:

<asp:ScriptManager ID="ScriptManagerMaster" EnablePartialRendering="true" runat="server">
    <Services>
        <asp:ServiceReference Path="~/Shared/WebService.svc" />
    </Services>
</asp:ScriptManager>

我希望能够从我的所有网页访问此内容。我尝试创建一个wcf服务来通过以下方式调用它:

    $('.renew-session').click(function () {
        clearTimeout(modalTimeout);
        var stayAlive = new PMWebService.WebService
        stayAlive.KeepSessionAlive(onTimeoutReturned, onDataFailure);
    });

然而,在“var stayAlive = new MyWebService.WebService”中失败,说PMWebService未定义。

我试图按照http://www.dotnetcurry.com/ShowArticle.aspx?ID=235上的示例进行操作。然而,当我完成这些步骤时,我在步骤4中得到了不同。当我查看脚本管理器的属性时,我没有看到服务集合。我的网站是作为网络应用程序运行的,所以我不知道这是否会产生任何影响。

我希望有人可以帮忙解决这个问题。我也尝试将其作为asmx服务运行但是也出现了同样的错误。我可以将它作为PageMethod运行,但我必须将它放在每个页面上。我也尝试了一个ashx处理程序,但不认为我可以从中返回超时值。

1 个答案:

答案 0 :(得分:0)

我刚刚对此进行了整理。我不得不从'KeepSessionAlive'的定义中删除'Shared'。我从其他地方复制了例程,并没有注意到定义是不正确的。