【问题标题】:Cleanup SOAP header after call webservice in C#在 C# 中调用 webservice 后清理 SOAP 标头
【发布时间】:2012-04-01 02:34:34
【问题描述】:

我在源自 SoapHttpClientProtocol 的 C# 应用程序中注册了 .webservice。使用 Invoke() 方法调用远程方法。 一切正常。

我的问题是,我正在调用传递用户名/密码的方法,一切都通过 SSL,chanel 不缺乏安全性,但是,在检查本地计算机嗅探内存后,我可以看到所有 SOAP 标头调用后在进程的内存中休息,因此任何使用简单工具的人都可以读取我将用户名/密码发送到 web 服务的内存。

我想要的是在调用 webservice 的方法后释放内存。我已经尝试处理类,将类放在“using() {}”中,但信息仍保留在内存中。

有没有办法在使用 web 服务后清理 SOAP 标头?

有办法强制清理内存或垃圾收集器吗?

【问题讨论】:

    标签: c# web-services memory soap-client


    【解决方案1】:

    你可以通过调用强制垃圾回收:

    GC.Collect()
    

    当然,您通常不应该这样做。可能不会清理内存的特定部分。此外,如果您尝试强制收集,则需要检查每个收集过程的结果,看看是否应该再次调用它。

    但不要。如果某人足够聪明,可以检查记忆,那么他们可能足够聪明,可以在他们所在的短暂窗口内找到凭据。

    是否提供了用户名密码用户?如果是这样 - 在那里获取凭据可能同样容易。

    更新:我想到了另一个想法……您可以用一种对内存有更明确控制的语言(例如 C++)来实现服务调用。然后,您可以进行调用,并明确写入具有凭据的内存。 Web 服务调用部分在套接字中很容易实现,但是 SSL 部分并不重要。

    【讨论】:

    • 嗯实际上是一个复杂的情况(主要是用户请求!)想象一个用户输入登录名/密码,进行网络服务调用,然后另一个用户控制应用程序,此时他可以检查内存并获取调用中传递的信息,这就是我想要避免的。
    • 顺便说一句,GC.Collect() 什么也没做... login/passw 仍在内存中。我还尝试打第二个电话,期望第一个电话被替换,但事实并非如此,两个电话都在内存中,并带有明确的登录/密码信息......感谢任何帮助。
    • 这就是为什么我建议“可能不会清理特定部分的内存”。我添加了另一个建议。
    • @Arun 你有更好的主意吗?也许您错过了答案的“但不要”部分?
    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    相关资源
    最近更新 更多