C# 将当前代码转换为web服务

C# 将当前代码转换为web服务,c#,vb.net,web-services,C#,Vb.net,Web Services,我有以下代码要转换为web服务 我在运行web服务时得到[],没有搜索结果,只有[] 这是什么意思 旧代码: Sub Search(ByVal intSearchType As Search.enmSearchType) Try Dim objSearch As New Search 'search object Dim objSearchInst As New Search 'search object Dim intResult As Integer

我有以下代码要转换为web服务

我在运行web服务时得到
[]
,没有搜索结果,只有
[]

这是什么意思

旧代码:

Sub Search(ByVal intSearchType As Search.enmSearchType)
Try

Dim objSearch As New Search             'search object
Dim objSearchInst As New Search         'search object
Dim intResult As Integer                'function call results
Dim objList As New ArrayList            'array list of search objects

'hide search panel and check at least 3 characters entered in search field
panSearch.Visible = True
If Len(txtSearch.Text) < 3 Then
    txtResults.Text = "Enter at least 3 characters to do a search"
    Exit Sub
End If

'do keyword search
intResult = objSearch.SearchByKeyword(txtSearch.Text, Session("Person"), Session("Office"), Session("Organisation"), _
                                      Session("Role"), intSearchType, objList)

'if error is returned show user and clear results
If intResult <> 0 Then
    txtResults.Text = "Oops. There was a problem performing the search, please try again later"
    Exit Sub
End If
txtResults.Text = ""

 'show results for contacts
    For Each objSearchInst In objList
        txtResults.Text += "<a href='#' class=lnks onclick=""return OpenWindow('../contactmanagement/contact.aspx?PersonRef=" & objSearchInst.Return1 & "',750,600)""><b>#" & objSearchInst.Return1 & "</b>: " & objSearchInst.Return2 & " " & objSearchInst.Return3 & "</a><br/>"
    Next

End If

'no results found show user
If txtResults.Text = "" Then
    txtResults.Text = "no matching records found"
End If
子搜索(ByVal intSearchType作为Search.enmSearchType)
尝试
Dim objSearch作为新搜索的搜索对象
Dim objSearchInst作为新搜索的搜索对象
将intResult设置为整数的函数调用结果
Dim objList作为新ArrayList的搜索对象数组列表
'隐藏搜索面板并检查在搜索字段中输入的至少3个字符
panSearch.Visible=True
如果Len(txtSearch.Text)<3,则
txtResults.Text=“输入至少3个字符进行搜索”
出口接头
如果结束
'进行关键字搜索
intResult=objSearch.SearchByKeyword(txtSearch.Text、Session(“人”)、Session(“办公室”)、Session(“组织”)_
会话(“角色”)、intSearchType、objList)
'如果返回错误,则显示用户并清除结果
如果结果为0,则
txtResults.Text=“哦,执行搜索时出现问题,请稍后再试”
出口接头
如果结束
txtResults.Text=“”
'显示联系人的结果
对于objList中的每个objSearchInst
txtResults.Text+=“
” 下一个 如果结束 '未找到显示用户的结果 如果txtResults.Text=”“,则 txtResults.Text=“未找到匹配的记录” 如果结束
特例 txtResults.Text=“哦,执行搜索时出现问题,请稍后再试” 结束尝试 端接头

我尝试过但不起作用的是:

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True)> _
    Public Function ContactGet(ByVal searchField As String) As String

    Dim objSearch As New ArrayList
    Dim objSearching As New Search
    Dim intResult As Integer

    Try

        intResult = objSearching.SearchByKeyword(searchField, str_person_ref, str_office_ref, str_organization_ref, _
                                         str_role_ref, company.ETMyProperty.Search.enmSearchType.enmContact, objSearch)

            Dim objContact As New Person
            Dim dt As New DataTable("Contacts")

            Dim col_Name As New DataColumn("Name", GetType(String))
            dt.Columns.Add(col_Name)

            Dim col_Mobile As New DataColumn("Mobile", GetType(String))
            dt.Columns.Add(col_Mobile)

            Dim col_Office As New DataColumn("ContactNum", GetType(String))
            dt.Columns.Add(col_Office)

            Dim col_Category As New DataColumn("Category", GetType(String))
            dt.Columns.Add(col_Category)

            Dim dr As DataRow

            'add new row to datatable
        'For Each objSearching In objSearch

        'For Each drow As DataRow In objSearch
        '    dr = dt.NewRow()
        '    dr("Name") = objContact.FullName
        '    dr("Mobile:") = objContact.MobileNumber
        '    dr("ContactNum") = objContact.OfficeNumber
        '    dr("Category") = objContact.PersonRelationshipType
        '    dt.Rows.Add(dr)
        'Next

        For i = 0 To objSearch.Count - 1
            dr = dt.NewRow()
            dr("Name") = DirectCast(objSearch(i), company.ETMyProperty.Search).SearchByKeyword(searchField, Session("Person"), Session("Office"), Session("Organisation"), _
                                              Session("Role"), company.ETMyProperty.Search.enmSearchType.enmContact, objSearch)
            dr("Mobile") = DirectCast(objSearch(i), company.ETMyProperty.Search).SearchByKeyword(searchField, Session("Person"), Session("Office"), Session("Organisation"), _
                                              Session("Role"), company.ETMyProperty.Search.enmSearchType.enmContact, objSearch)
            dr("ContactNum") = DirectCast(objSearch(i), company.ETMyProperty.Search).SearchByKeyword(searchField, Session("Person"), Session("Office"), Session("Organisation"), _
                                              Session("Role"), company.ETMyProperty.Search.enmSearchType.enmContact, objSearch)
            dr("Category") = DirectCast(objSearch(i), company.ETMyProperty.Search).SearchByKeyword(searchField, Session("Person"), Session("Office"), Session("Organisation"), _
                                              Session("Role"), company.ETMyProperty.Search.enmSearchType.enmContact, objSearch)
            dt.Rows.Add(dr)
        Next

        'Dim objList As New ArrayList
        'For Each objSearching In objList
        '    Dim strText As String = ""
        '    strText += "<a href='#' class=lnks onclick=""window" & objSearching.Return1 & "',750,600)""><b>#" & objSearching.Return1 & "</b>: " & objSearching.Return2 & " " & objSearching.Return3 & "</a><br/>"
        'Next

        Dim serializer As New JavaScriptSerializer()
        Dim rows As New List(Of Dictionary(Of String, Object))()
        Dim row As Dictionary(Of String, Object) = Nothing

        'serialize dt row to json output
        For Each drow As DataRow In dt.Rows
            row = New Dictionary(Of String, Object)()
            For Each col As DataColumn In dt.Columns
                row.Add(col.ColumnName, dr(col))
            Next
            rows.Add(row)
        Next

        Dim str_json = JsonConvert.SerializeObject(dt, Formatting.Indented)

        Return str_json

    Catch ex As Exception
        Return Nothing
    End Try
End Function 
_
_
公共函数ContactGet(ByVal searchField作为字符串)作为字符串
Dim objSearch作为新的ArrayList
Dim objSearching作为新搜索
将结果设置为整数
尝试
intResult=objSearching.SearchByKeyword(searchField、str\u person\u ref、str\u office\u ref、str\u organization\u ref、_
str_role_ref,company.ETMyProperty.Search.enmSearchType.enmContact,objSearch)
模糊对象联系人作为新人
Dim dt作为新数据表(“联系人”)
Dim col_Name作为新数据列(“Name”,GetType(String))
dt.Columns.Add(col_Name)
Dim col_Mobile作为新的数据列(“Mobile”,GetType(String))
dt.Columns.Add(col_Mobile)
Dim col_Office作为新数据列(“ContactNum”,GetType(String))
dt.列添加(列办公室)
Dim col_Category作为新的数据列(“Category”,GetType(String))
dt.列.添加(列类别)
将dr设置为数据行
'将新行添加到datatable
'对于objSearch中的每个objSearch
'对于每个drow作为objSearch中的数据行
'dr=dt.NewRow()
'dr(“Name”)=objContact.FullName
'dr(“Mobile:”)=objContact.MobileNumber
'dr(“ContactNum”)=objContact.OfficeNumber
'dr(“类别”)=objContact.PersonRelationshipType
'dt.Rows.Add(dr)
”“接着呢
对于i=0到objSearch.Count-1
dr=dt.NewRow()
dr(“姓名”)=DirectCast(objSearch(i),company.ETMyProperty.Search)。SearchByKeyword(搜索字段、会话(“人员”)、会话(“办公室”)、会话(“组织”)_
会话(“角色”),company.ETMyProperty.Search.enmSearchType.enmContact,objSearch)
dr(“移动”)=DirectCast(objSearch(i),company.ETMyProperty.Search)。SearchByKeyword(搜索字段、会话(“人员”)、会话(“办公室”)、会话(“组织”)_
会话(“角色”),company.ETMyProperty.Search.enmSearchType.enmContact,objSearch)
dr(“ContactNum”)=DirectCast(objSearch(i),company.ETMyProperty.Search)。SearchByKeyword(搜索字段,会话(“人员”)、会话(“办公室”)、会话(“组织”)_
会话(“角色”),company.ETMyProperty.Search.enmSearchType.enmContact,objSearch)
dr(“类别”)=DirectCast(objSearch(i)、company.ETMyProperty.Search)、SearchByKeyword(搜索字段、会话(“人员”)、会话(“办公室”)、会话(“组织”)_
会话(“角色”),company.ETMyProperty.Search.enmSearchType.enmContact,objSearch)
dt.行.添加(dr)
下一个
“Dim对象列表作为新的ArrayList”
'对于OBJ列表中的每个OBJ搜索
'Dim strText As String=“”
'strText+=“
” ”“接着呢 Dim序列化程序作为新的JavaScriptSerializer() 将行调整为新列表(字典(字符串、对象))() Dim行作为字典(字符串、对象的)=无 '将dt行序列化为json输出 对于每个drow,作为dt.行中的数据行 行=新字典(字符串、对象)() 对于每个列,作为dt.列中的DataColumn 行添加(列名称,dr(列)) 下一个 行。添加(行) 下一个 Dim str_json=JsonConvert.serialized对象(dt,Formatting.Indented) 返回str_json 特例 一无所获 结束尝试 端函数

这就是我尝试过的,并且注释过的代码也是我尝试过的,但不起作用,或者返回上面所述的代码。我对web服务非常陌生,希望将其转换为web服务,但我正在努力。我不介意救命

由于Web服务的代码应该与非Web服务方法的代码相同,而且您的问题是它没有返回预期值,并且您不熟悉Web服务,因此我建议采用增量方法

  • 首先编写一个返回适当类型的硬代码值的web服务
  • 验证服务是否正常工作并返回预期结果
  • 将实际方法编写为非webservice,但使用相同的输入输出类型
  • 验证您的方法是否有效并生成
    Private Function ContactGetInfo(ByVal searchField As String) As String
        Return String.Format("user3458266less: {0}", searchField)
    End Function
    
    <WebMethod()> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True)> _
        Public Function ContactGet(ByVal searchField As String) As String
           Return ContactGetInfo(searchField)
        End Function