1

我用 vb.net 实现了一个网络服务

方法是这样的

Public Class WebService
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function INSERT_NEW(ByVal i As Integer, ByVal f As String) As String
        Dim con As New OleDbConnection
        Dim cmd As New OleDbCommand
        Try
            con.ConnectionString = ConfigurationManager.ConnectionStrings("WebConnectionSTR").ToString
            'Dim strMdbPath As String = "C:\Users\Hossein\Documents\Visual Studio 2010\WebSites\WebSite1\"
            'Dim strProvider As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
            'Dim strDBFile As String = "db.mdb"
            cmd.Connection = con
            cmd.CommandText = "insert into tb values (" & i & ",'" & f & "')"
            con.Open()
            cmd.ExecuteNonQuery()
            con.Close()
            Return "1"
        Catch ex As Exception
            con.Close()
            Return "0"
        End Try
    End Function
End Class

如果我运行它并调用它,它就可以工作

但是当我创建一个 Windows 应用程序时,我遇到了一个未知问题,因为我在 web 方法中使用了 2 个(整数和字符串)输入参数作为输入参数,INSERT_NEW(byval i as integer,byval f as string) as string

它没有用

Imports wsdl.Myservice

Public Class Form1

    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        Dim s As WebServiceSoap = New WebServiceSoapClient

        lblAdd.Text = s.INSERT_NEW(txt1.Text, txt2.Text)


    End Sub
End Class

但是当我将 web 方法中的输入参数更改为 INTEGER 时,它可以正常工作

在 Web 服务的 Web 方法中使用数据类型是否有限制,或者我做错了什么???

我添加了这 3 张照片,以向您展示我得到的确切错误。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

4

2 回答 2

1

你声明你的 webmethod 接收一个整数和一个字符串。所以你应该传递一个整数和一个字符串,但是你的代码试图传递两个字符串。您应该尊重 webmethod 的签名并按预期传递参数

lblAdd.Text = s.INSERT_NEW(Convert.ToInt32(txt1.Text), txt2.Text)

当然,这里我假设 txt1.Text 中的字符串可以转换成整数。

说我想指出你的代码的一个非常大的问题:如果恶意用户为参数 f 传递以下字符串会发生什么

"xxxxx');DELETE FROM tb; --"

它被称为 Sql 注入,可能会对您的数据库造成严重破坏。当您收到用户的输入并将其传递给数据库命令时,请尝试始终使用参数化查询

Using con = New OleDbConnection(ConfigurationManager.ConnectionStrings("WebConnectionSTR").ConnectionString)
Using cmd = New OleDbCommand("insert into tb values (?, ?)", con)
Try
    con.Open()
    cmd.Parameters.AddWithValue("@p1",i) 
    cmd.Parameters.AddWithValue("@p2",f) 
    cmd.ExecuteNonQuery()
    Return "1"
Catch ex As Exception
    Return "0"
End Try
End Using
End Using
于 2013-08-13T21:57:03.533 回答
0

最后我自己找到了答案

导入 wsdl.Myservice

导入 System.Reflection

公开课形式1

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
    Dim s As WebServiceSoap = New WebServiceSoapClient
    Dim method As MethodInfo = s.GetType().GetMethod("INSERT_NEW")
    Dim returnValue As Integer = method.Invoke(s, New Object() {CInt(txt1.Text), txt2.Text})

    lblAdd.Text = returnValue

End Sub

结束类

于 2013-08-15T21:32:20.147 回答