在基于ajax的客户端回调到WCF之后重新加载页面

时间:2010-02-20 13:49:18

标签: asp.net ajax wcf

我已经为WCF服务设置了一个基本的客户端回调。请参阅下面的示例代码。

使用附加到资源管理器的http过滤器查看时,您可以看到: 1. service1.svc / js正常工作并将正确的java脚本返回给浏览器 2. serrvice1.svc工作并返回正确的json数据。 3.通话很好,使用警报而不是更新div信息我得到了数据。

然后在警报确定之后,页面将从头开始重新加载。

无法理解为什么?有什么想法?

代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Simple_ClientNetwork_Calls.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>

</head>
<body >
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Scripts>
                <asp:ScriptReference Path="~/WebKit.js" />
            </Scripts>
             <Services>
                <asp:ServiceReference  Path="~/Service1.svc" />
            </Services>
        </asp:ScriptManager>
      <script type="text/javascript">
          var BedList = null;
          var status = null;

          //add a window.load handler to init any necessary controls
          Sys.Application.add_load(initializeControls);

          function initializeControls(e) {
              status = $get("status");
          }

          function testme() {
              document.bgColor = "#FF0000";
              getBedList();
          }

          function getBedList() {
              iMDsoft.Demo.SimpleService.GetBedList(GetBedListOnSuccess, GetBedListOnFailed);
          }


          function GetBedListOnSuccess(results, context, methodName) {

              var BedList = results
              status.innerText = "Complete" + BedList[0].Name;
          }

          function GetBedListOnFailed(results, context, methodName) {
              status.innerText = "GetBedListOnFailed: " + results.get_message();
          }

    </script>
    <button id="button1" onclick="testme();" >TestMe</button>
    <div id="status">
            </div>
     </div>
    </form>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

不确定这是否也适用于按钮,但至少对于链接,您需要在onclick事件中返回false。试试这个:

<button id="button1" onclick="testme();return false;" >TestMe</button>

答案 1 :(得分:0)

好的,有几件事需要考虑:

  1. 确保在Web服务中公开支持Web http的绑定端点:

    <endpoint address="" 
              binding="webHttpBinding" 
              contract="Namespce.IServiceContract" />
    
  2. 确保您使用.svc标记中的WebScriptServiceHostFactory工厂:

    <%@ ServiceHost 
        Language="C#" 
        Debug="true"    
        Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" 
        Service="Namespace.Service1" 
        CodeBehind="Service1.svc.cs" %>
    
  3. 您正在调用iMDsoft.Demo.SimpleService.GetBedList函数,但是您是否已验证生成的javascript代理(http://example.com/service1.svc/js)中是否存在此类函数?例如:

    [ServiceContract(Namespace = "http://imdsoft.demo")]
    public interface IService1
    {
        [OperationContract]
        string GetBedList();
    }
    

    将生成以下javascript代理方法:imdsoft.demo.iservice1.GetBedList