代码之家  ›  专栏  ›  技术社区  ›  Oliver

在异步回发期间以编程方式添加ServiceReference

  •  3
  • Oliver  · 技术社区  · 16 年前

    可以添加新的吗 ServiceReference 实例到 ScriptManager 上 Page 在异步回发过程中,以便随后通过客户端脚本使用引用的Web服务?

    我想在一个 UserControl 坐在一个 Repeater ,这就是为什么在 Page_Load 这里不工作。

    编辑2: 这是我从我的 用户控件 这并不像我期望的那样(在异步回发期间将servicereference添加到scriptmanager):

    private void RegisterWebservice(Type webserviceType)
    {
        var scm = ScriptManager.GetCurrent(Page);
        if (scm == null)
            throw new InvalidOperationException("ScriptManager needed on the Page!");
    
        scm.Services.Add(new ServiceReference("~/" + webserviceType.Name + ".asmx"));
    }
    

    我的目标是让我的用户控件尽可能不干扰周围的应用程序;否则我将不得不静态地定义 服务引用 在一个 ScriptManagerProxy 关于包含 页 这不是我想要的。

    编辑:

    我写这篇文章的时候一定很累…因为我想写 服务引用 不 ScriptReference .相应地更新了上面的文本。

    现在我有:

    <asp:ScriptManagerProxy runat="server" ID="scmProxy">
        <Services>
            <asp:ServiceReference Path="~/UsefulnessWebService.asmx" />
        </Services>
    </asp:ScriptManagerProxy>
    

    但我想在codebehind中注册WebService。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Krunal    16 年前

    编辑:

    在检查完您的问题后,以下是问题不起作用的原因: 在页面中手动向scriptmanager>服务部分添加服务引用时。它添加了1个客户端脚本include指令。

    例如:

    <script src="TestService.asmx/jsdebug" type="text/javascript"></script>
    

    或

    <script src="TestService.asmx/js" type="text/javascript"></script>
    

    为您提供 frontend.web.yourscript方法 ,请

    现在,当您在异步回发中添加servicereference时- 它没有添加此客户端脚本inclue . 所以你得到了客户端脚本错误-方法是未定义的。

    但我发现 解决办法 为此; (不知道这是正确的方法)

        if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
        {
            ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "testservice", "TestService.asmx/js");
        }
    

    您可以根据您的项目/Web服务替换“testservice.asmx”路径。

    这样你就可以实现你想要的。

    希望这有帮助,

    克鲁纳尔梅瓦达


    老年人:

    使用下列内容:

        if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
        {
            ScriptManager.GetCurrent(this).Services.Add(new ServiceReference("~/Service.asmx"));
        }
    
        2
  •  2
  •   Krunal    16 年前

    尝试这样的方法…

    if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "script1", "~/js/myjs.js");
    }
    
    推荐文章