【问题标题】:Web Service SoapDocumentMethod OneWay IssueWeb 服务 SoapDocumentMethod OneWay 问题
【发布时间】:2009-04-30 16:49:39
【问题描述】:

首先,我要说这不是我编造的。我在 asmx 文件中实现了一个 web 方法,如下所示:

[WebMethod]
[SoapDocumentMethod(OneWay=true)]
public void Method1(INPUT oInput)
{
   // Call SQL stored procedure SP1
   // Call SQL stored procedure SP2
}

使用 SQL Server Profiler,我看到存储的 SP1 被调用,但 SP2 没有。如果我设置 OneWay=false,SP1 和 SP2 都会被调用。

这是奇怪的部分。我离开 OneWay=true 但我在 web 配置文件中设置了<trace enabled="true">,SP1 和 SP2 都被调用。真的没有!

在我将其降至最低限度后,我将尝试发布更多示例代码。同时,有没有人知道 ASP.NET 3.5 SP1 中可能导致此问题的错误?

查尔斯

【问题讨论】:

    标签: asp.net web-services


    【解决方案1】:

    我找到了自己的答案。 SP1 和 SP2 之间有一些代码可以访问 Context.Current.Request 对象。将其注释掉可以解决我的问题。

    结论?如果 OneWay=true,Request 对象似乎不可用。奇怪的是设置<trace enabled="true"> 使对象可用。

    来自OneWay property的文档:

    无权使用静态 Current 属性访问 HttpContext。要访问 HttpContext,请从 WebService 派生实现 XML Web 服务方法的类并访问 Context 属性。

    【讨论】:

    • 这是有道理的——当 OneWay=true 时,响应会在您的 WebMethod 启动之前返回。很高兴你明白了。
    【解决方案2】:

    根据this article,当 OneWay=true 时,来自 web.config 的模拟上下文会消失。两个 SP 的安全性是否可能略有不同?

    【讨论】:

    • 我会调查,但我怀疑这不是原因。我正在使用带有连接字符串的 SQL 服务器身份验证,例如“server=Server;database=Database;uid=User;pwd=Password”。以这种方式访问​​ SQL 时,运行的 ASP.NET 线程上下文似乎没有任何影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2010-10-28
    相关资源
    最近更新 更多