小编Tom*_*ter的帖子

.Net/C#对象应该自己调用Dispose()吗?

以下是一位同事撰写的示例代码.这对我来说显然是错的,但我想检查一下.一个对象应该从一个自己的方法中调用自己的Dispose()方法吗?在我看来,只有对象的所有者/创建者在完成对象而不是对象本身时才应该调用Dispose().

它是一个.asmx web方法,在完成时调用Dispose().(事实上​​,这是一个Web方法可能是一般问题的偶然事实.)在我们的代码库中,我们有时在其他Web服务的方法中实例化Web服务类,然后调用它们上的方法.如果我的代码执行此操作来调用此方法,则该方法返回时该对象是toast,并且我无法再使用该对象.

[WebMethod]
public string MyWebMethod()
{
    try
    {
        return doSomething();
    }
    catch(Exception exception)
    {
        return string.Empty;
    }
    finally
    {
        Dispose(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:找到一些相关的链接:

我是否需要在ASP.NET中部署Web服务引用?

配置Web服务代理类?

.net c# dispose web-services idisposable

34
推荐指数
2
解决办法
1万
查看次数

WSDL.exe 生成的 Web 服务代理代码与“更新 Web 参考” - 我应该关心吗?

使用 Visual Studio 2010,我们有一个包含多个网站(不是 Web 应用程序项目)以及命令行和 winforms 项目的解决方案。所有目标都是.Net 2.0。许多项目在网站中都有对 ASMX Web 服务的 Web 引用。

Web 服务经常变化,因此当我们编译所有内容时,我们必须手动遍历所有项目并更新 Web 服务引用。我现在已成功使用disco.exewsdl.exe自动化此操作。但我担心 wsdl.exe 生成的代码与 VS 中的 Web 参考的手动更新之间的差异。

wsdl.exe 生成如下代码:

public WebServiceName() {
    string urlSetting = System.Configuration.ConfigurationManager.AppSettings["WebServiceName"];
    if ((urlSetting != null)) {
        this.Url = urlSetting;
    }
    else {
        this.Url = "http://example/webservicename.asmx";
    }
}
Run Code Online (Sandbox Code Playgroud)

而VS生成的代码是这样的:

private bool useDefaultCredentialsSetExplicitly;

public WebServiceName() {
    this.Url = global::ProjectName.Properties.Settings.Default.ProjectName_WebServiceNameWebService_WebServiceName;
    if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
        this.UseDefaultCredentials = true;
        this.useDefaultCredentialsSetExplicitly = false;
    }
    else {
        this.useDefaultCredentialsSetExplicitly = true; …
Run Code Online (Sandbox Code Playgroud)

c# wsdl web-services asmx disco

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×2

web-services ×2

.net ×1

asmx ×1

disco ×1

dispose ×1

idisposable ×1

wsdl ×1