2009-04-30 65 views
0

首先,我会说我没有这样做。我有一个ASMX文件中实现这样的Web方法:Web服务SoapDocumentMethod单向问题

[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,但我在网络配置文件中设置了<trace enabled="true">,SP1和SP2都被调用。不完全是!

我会尝试发布更多的示例代码后,我把它放低到最低限度。同时,有没有人知道ASP.NET 3.5 SP1中的一个错误可能导致这种情况?

查尔斯

回答

1

我找到了我自己的答案。在SP1和SP2之间有一些代码访问Context.Current.Request对象。评论它解决了我的问题。

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

OneWay property文档:

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

+0

这是有道理的 - 当OneWay = true时,在你的WebMethod被启动之前返回Response。很高兴你想出来了。 – Moose 2009-04-30 21:36:30

0

根据this article,从web.config中模拟上下文消失时单向=真。两个SP的安全性有可能略有不同吗?

+0

我会调查,但我怀疑这不是原因。我正在使用连接字符串(如“server = Server; database = Database; uid = User; pwd = Password”)进行SQL Server身份验证。当以这种方式访问​​SQL时,似乎正在运行的ASP.NET线程上下文不起作用。 – Charles 2009-04-30 17:23:39