【问题标题】:converting my current code to web Service将我当前的代码转换为网络服务
【发布时间】: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


【解决方案1】:

由于 webservice 的代码应该与 non-webservice 方法的代码相同,而您的问题是它没有返回预期值,并且您不熟悉 webservices,我建议使用增量接近。

  1. 首先编写一个返回适当类型的硬编码值的 Web 服务。
  2. 验证服务是否正常运行并返回预期结果。
  3. 将实际方法编写为非 Web 服务,但输入输出类型相同。
  4. 验证您的方法是否有效并产生预期结果。
  5. 将代码从非网络服务复制/粘贴到网络服务中。

一旦您对编写和使用 Web 服务感到满意,您就可以直接使用 Web 方法编写代码。

我应该补充一点,作为替代步骤 5,复制/粘贴,您可以改为让您的网络服务调用您的非网络服务方法:

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

【讨论】:

    猜你喜欢
    • 2015-12-12
    • 2017-09-28
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多