【发布时间】:2014-04-05 10:11:31
【问题描述】:
我想将以下代码转换为 Web 服务。
我在运行网络服务时得到<string xmlns="http://company.net/">[]</string>,没有搜索结果只是[]
这是什么意思?
旧代码:
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
将 ex 捕获为异常 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
这就是我尝试过的,注释代码也是我尝试过的,但它不起作用,或者它返回上述内容。我对 Web 服务非常陌生,想将其转换为 Web 服务,但我很挣扎。我不介意 C# 帮助!
【问题讨论】:
-
第一个代码示例的最后一部分缺少代码格式。我无法修复它,因为它会少于 6 个字符的编辑限制。
-
你试过调试吗?您是否尝试过减少您的 Web 服务代码,直到您真正得到一些预期的结果?也许从一个简单的字符串值开始,然后从那里开始。
-
@MEMark 从未尝试过,我不知道如何正确调试,但尝试减少代码。如果有人帮助我但我想不通,那就太好了。
-
@MEMark 在
intResult = ....部分有断点,所有值都什么都不是,那么如果它在dt也没有什么或0,它不会进入i = 0 To objSearch.Coun.... -
我问的原因是你的帖子里有很多代码。对于不熟悉它的人来说,很难理解发生了什么。寻求帮助时通常要做的事情是尽可能少地减少代码,同时仍然显示问题。例如。如果您离开
Name并删除Mobile等,您可能会遇到相同的错误。同时删除所有注释掉的代码。
标签: c# vb.net web-services