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

中的WCF服务引用ASP.net第页-何时处理?

  •  2
  • Dismissile  · 技术社区  · 15 年前

    我有一个ASP.net正在创建对WCF服务的服务引用并在我的页面中的多个位置进行调用的页面。我在页面加载中实例化服务引用,并使用实例变量来存储它:

    private FooClient _serviceClient;
    
    protected void Page_Load(object sender, EventArgs e)
    {
        _serviceClient = nwe FooClient();
        _serviceClient.GetAllFoos();
    }
    
    protected void btnSave_Click(object sender, EventArgs e)
    {
        _serviceClient.SaveFoo();
    }
    

    有没有更好的办法?

    2 回复  |  直到 15 年前
        1
  •  0
  •   stack72    15 年前

    根据MSDN文档和个人经验,请执行以下操作:

     try
    {
        ...
        client.Close();
    }
    catch (CommunicationException e)
    {
        ...
        client.Abort();
    }
    catch (TimeoutException e)
    {
        ...
        client.Abort();
    }
    catch (Exception e)
    {
        ...
        client.Abort();
        throw;
    }
    

        2
  •  1
  •   Ronald Wildenberg    15 年前

    就我个人而言,我会打开 FooClient 当我需要的时候,所以 Page_Load 但是在执行web服务调用的方法中。这样,你就知道它到底发生了什么。我通常采取以下方法:

    var client = OpenClient();
    try
    {
        // Perform operation(s) on client.
    }
    finally
    {
        CloseClient(client);
    }
    

    这样,无论发生什么,都可以确保关闭代理(如果需要捕获异常,只需添加catch子句)。这个 CloseClient 方法应该与PaulStack的答案中的方法类似。

    第三,假设发生了一个异常,您不能捕获或不想捕获,我不确定 Page_Unload 实际上是被调用的(我不知道在那个事件中会调用什么page方法)。这也会使连接保持打开状态。

    推荐文章