将我当前的代码转换为 Web 服务
本文关键字:转换 Web 服务 代码 | 更新日期: 2023-09-27 17:57:03
>我有以下代码要转换为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# 帮助!
由于 Web 服务的代码
应该与非 Web 服务方法的代码相同,并且您的问题是它没有返回预期值,并且您不熟悉 Web 服务,因此我建议采用增量方法。
- 首先编写一个返回相应类型的硬代码值的 Web 服务。
- 验证服务是否正常工作并返回预期结果。
- 将实际方法编写为非 Web 服务,但具有相同的输入输出类型。
- 验证您的方法是否有效并产生预期的结果。
- 将代码从非 Web 服务复制/粘贴到 Web 服务中。
一旦你习惯了编写和使用 Web 服务,你就可以直接转到在 Web 方法中编写代码。
我应该补充一点,作为替代步骤5,复制/粘贴,你可以让你的Web服务调用你的非webservive方法:
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