System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值,此问题如何解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值,此问题如何解决相关的知识,希望对你有一定的参考价值。

System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值: http://tempuri.org/GetCommonQueryInfo。
在 System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest()
在 System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
在 System.Web.Services.Protocols.SoapServerProtocol.Initialize()
在 System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response)
在 System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)

参考技术A 视数据库的工具,你先看看你执行的Sql文是否有问题。
你的问题就是超时,具体地点可能在数据。

在一个你要注意信息安全问题。。。。
参考技术B 请问这个问题你解决了吗?怎么解决的啊,我被困了很久了,调试的时候OK,部署在本机,连部署地址就这个错误 参考技术C 我现在也遇到这个问题了,估计是参数的问题。 参考技术D 服务器的问题,检查网站的代码,如果站点不是你的,那就别管了追问

这是发生在我的客户端调用服务端WebService的方法时,为何会出现此错误?

追答

。net的调试比较麻烦,你自己慢慢查,无非就是看看变量,查查参数...

追问

但在浏览器直接调用WebService的方法没有错误啊,郁闷

变量没有从 SQl 查询中获取数据

【中文标题】变量没有从 SQl 查询中获取数据【英文标题】:Variable isn't taking the data from the SQl query 【发布时间】:2012-01-09 00:09:37 【问题描述】:

我设置了一个 SQL 来查询数据库并查找表中金额的总和,但是它没有返回任何内容,所有数据字段都是正确的,而且查询在运行方式上也是正确的,我认为问题是将它传递给数据读取器的变量,如果有人能纠正这个我会很感激。

这是代码,我觉得和datareader有关:

System.Web.Services.Protocols.SoapException:服务器无法处理请求。 ---

System.Data.OleDb.OleDbException:FROM 子句中的语法错误。在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象& 执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法)在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior 行为) 在 HSBC.CheckBal(Int64 帐号) 在 HSBC.CheckBalance(Int64 accountnumber) --- 内部异常堆栈跟踪结束 ---

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException:服务器无法 处理请求。 ---> System.Data.OleDb.OleDbException:语法错误 在 FROM 子句中。在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象& 执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法)在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior 行为) 在 HSBC.CheckBal(Int64 帐号) 在 HSBC.CheckBalance(Int64 accountnumber) --- 内部异常堆栈跟踪结束 ---

这是被调用的代码。

    'Creates a service web method

    Private Function CheckBal(ByVal accountnumber As Long) As String

        'Database(drivers, connections And commands)
        Dim BalanceDr As OleDbDataReader
        Dim BalanceConn As OleDbConnection
        Dim BalanceCmd As OleDbCommand

        'Database connection string
        Dim Connx As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../database/HSBC.mdb") & ";"

        'SQL

        Dim SQL As String = "SELECT Transaction_Amount FROM Transaction WHERE Account_Number =" & accountnumber & ";"

        Dim bal As String

        'Open the connection to the database
        BalanceConn = New OleDbConnection(Connx)
        BalanceConn.Open()
        BalanceCmd = New OleDbCommand(SQL, BalanceConn)

        'Create a DataReader that will return information.
        BalanceDr = _
        BalanceCmd.ExecuteReader(CommandBehavior.CloseConnection)

        If BalanceDr.Read() Then
            'A row was returned
            bal = BalanceDr(0)
        Else
            'A row was not returned
            bal = "No Balance For Account Found"
        End If
        BalanceDr.Close()
        Return SQL
    End Function
End Class

【问题讨论】:

应用程序是否对数据库文件夹具有写入权限?没有它,它就无法创建 .ldb 文件,因此没有锁、没有访问权限、没有查询、什么都没有。一步一步打开连接后,检查 /database 文件夹并查看 ldb 文件是否存在。如果不是,则缺少权限。如果它的 web 我不记得它是 I_User 还是 W_User 用于 IIS。 在权限下的数据库中,它已读取设计、修改设计、管理、读取数据、更新数据、插入数据和删除数据,但它说它是以管理员身份运行的。另外我在数据库文件夹中没有 ldb 文件。权限在那里,因为我有另一个正在运行的服务正在保存到数据库和一个外部数据库 连接打开时会创建 .ldb 文件。手动打开 .mdb,您会看到 access 在该文件夹中创建了一个 .ldb。至于权限;如果这是一个网站,您需要 I_USER 或 I_Wuser 对数据库文件夹具有写入权限。无论 Web 服务在哪个帐户下运行,都需要对该文件夹的写入权限。 example 【参考方案1】:

问题是Transaction,也是你数据库中的表名,是保留字;这就是您收到语法错误的原因。

更改您的 SQL 语句以将表名括在方括号中将解决该问题:

Dim SQL As String = "SELECT Transaction_Amount FROM [Transaction] WHERE Account_Number =" & accountnumber & ";"

【讨论】:

【参考方案2】:

如何设置权限。

以下是权限如何工作以及服务器管理员需要做些什么来设置权限的快速摘要,以防您感到好奇。

匿名用户通过网络浏览器访问 ASP 页面 当用户通过网络浏览器访问这些页面时,IIS 将(默认情况下)使用名为 iUSR_ 或“everyone”的 Windows NT 帐户。

要设置您必须在服务器上的权限并浏览到数据库所在的文件夹。然后右键单击并选择属性。然后,您授予该帐户更改或修改数据库所在文件夹的权限。更改或修改意味着... r w x d(读/写/执行/删除)。将来,当您将另一个数据库放在同一目录中时,它通常会继承权限,您不必再次询问。如果您删除目录并重新创建它,您将失去它的权限,并且必须重新设置它们。

希望这能让您更好地了解当您的 ASP 脚本和数据库无法正常工作时发生的情况。 SOURCE

选项 2) not sure of jet 将事务视为保留字。试着把它放在[]的

SELECT Transaction_Amount FROM [Transaction] WHERE Account_Number =" & accountnumber & ";"

【讨论】:

以上是关于System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值,此问题如何解决的主要内容,如果未能解决你的问题,请参考以下文章