Перенос веб-служб (VS2003) в WCF (VS2010) - PullRequest
1 голос
/ 09 октября 2011

Наш сайт поддерживается VS2003. Мы преобразовали наше решение в VS2010 - это проект веб-приложения. В нем есть несколько файлов веб-служб (окончание файлов .asmx), которые мы надеялись преобразовать в WCF в два этапа: сначала сохранить функцию файлов asmx, которые записывают XML-документы через AJAX для клиента ..., а затем научиться создавать Службы WCF с поддержкой AJAX делают то же самое.

Мы исследовали ошибку «Не удалось создать тип xxx», и рекомендации могут отличаться. Мы уверены (!!), что наличие папки App_Code не является разницей, что мы правильно назвали пространство имен и класс, что мы правильно оформили код веб-службы и что мы можем использовать ASP.Net 2.0, чтобы активировать эти службы, и что у нас правильно установлен уровень приложения в IIS ... и мы все еще не можем преодолеть ошибку.

Вот наш код asmx (мы создали тестовую страницу с элементом управления ScriptManager, чтобы попытаться использовать этот веб-метод, но мы так и не смогли пройти сборку для службы). Вам, конечно, не нужно беспокоиться о фактических извлечениях базы данных, но я все равно оставил их:

Imports System
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Web.Script.Services
Imports System.ComponentModel
Imports System.Data.SqlClient
Imports System.Text
Imports System.Uri
Imports System.Xml
Imports System.IO

<WebService([Namespace]:="nsCarousel", Description:="Carousel Web Service Methods")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<System.Web.Script.Services.ScriptService()> _
Public Class Carousel
    Inherits WebService

    <WebMethod(Description:="Get Dealer Info")> _
    Public Function GetDealerInfo(ByVal DID%) As String
        Dim s$, sql$, sRequest$, sRequestPathQuery$, sDID$, sAJAX$, sReturn$, sIP$, sWebSite$, sErr$, sDealerSearch$
        Dim sXML$, sXMLDealerResults$, sXMLPath$
        Dim sUserName$, sGeneralDesc$, sStatusText$
        Dim bPost As Boolean
        Dim bHaveData As Boolean
        Dim ds As DataSet
        Dim dasql As SqlDataAdapter
        Dim sqldr As SqlDataReader
        Dim sqlConn As SqlConnection
        Dim sqlCmd As SqlCommand
        Dim xdoc As New XmlDocument
        Dim xnode As XmlNode
        Dim xrefnode As XmlNode
        Dim xnewnode As XmlElement

        Try
            '/ need test of sRequest for reference and use in test just below
            bPost = False
            sDID = Convert.ToString(DID)
            sGeneralDesc = "Dealer Pull"

            sqlConn = New SqlConnection(ConfigurationSettings.AppSettings("ConnectionStringLong"))
            sqlConn.Open()
            '/ new sp to preserve nodes, even when fields are null
            '/ get results for individual dealer
            sql = "insert into junk(entrydate, sql_stmts) select GetDate(), '" & sDID & "';"
            sqlCmd = New SqlCommand(sql, sqlConn)
            sqlCmd.ExecuteNonQuery()
            sqlCmd.Dispose()

            sql = "Select_DRPROByDID_xml " & sDID
            sqlCmd = New SqlCommand(sql, sqlConn)
            sqldr = sqlCmd.ExecuteReader()
            '/ quick test if have data
            bHaveData = False
            Do While sqldr.Read
                If Not (IsDBNull(sqldr("DNum"))) Then
                    bHaveData = True
                End If
                Exit Do
            Loop
            sqldr.Close()
            sqldr = Nothing
            sqlCmd.Dispose()
            sqlCmd = Nothing
            '/ s will include a node for NewDataSet -> remove and add nodes for msg based on status
            '/ and DealerError
            If bHaveData Then
                dasql = New SqlDataAdapter(sql, sqlConn)
                ds = New DataSet
                dasql.Fill(ds)
                s = ds.GetXml
                sXMLDealerResults = s
                dasql.Dispose()
                ds.Clear()
                dasql = Nothing
                ds = Nothing
                '/ query the XML doc
                xdoc.LoadXml(s)
                xnode = xdoc.SelectSingleNode("/NewDataSet/Table")
                If (xnode.HasChildNodes) Then
                    If (sDID.Length > 0) Then
                        sStatusText = xdoc.GetElementsByTagName("DRStat").Item(0).InnerText
                        Select Case sStatusText
                            Case "A"
                                '/ test next when opportunity exists
                                '/ set current node at Table
                                'sXMLPath = "/NewDataSet/Table"
                                '/ set Table as the current node
                                'xrefnode = xdoc.SelectSingleNode(sXMLPath)
                                'xnewnode = xdoc.CreateElement("DealerMsg")
                                'sStatusText = "Active dealer found."
                                'xdoc.InsertAfter(xnewnode, xrefnode)
                                sXMLDealerResults = sXMLDealerResults.Replace("<Table>", "<Table><DealerMsg>Active dealer found.</DealerMsg>")
                            Case "C"
                                sXMLDealerResults = sXMLDealerResults.Replace("<Table>", "<Table><DealerMsg>Dealer has been cancelled.</DealerMsg>")
                            Case "H"
                                sXMLDealerResults = sXMLDealerResults.Replace("<Table>", "<Table><DealerMsg>Dealer is on hold.</DealerMsg>")
                            Case Else
                                sXMLDealerResults = sXMLDealerResults.Replace("<Table>", "<Table><DealerMsg>Dealer status is invalid.</DealerMsg>")
                        End Select
                        sXMLDealerResults = sXMLDealerResults.Replace("<Table>", "<Table><DealerError>1</DealerError>")
                    Else
                        '/ do nothing
                    End If
                Else
                    sXMLDealerResults = sXMLDealerResults.Replace("<Table>", "<Table><DealerError>0</DealerError><DealerMsg>Dealer not found.</DealerMsg>")
                End If
            Else
                sXMLDealerResults = "<Table><DealerError>0</DealerError><DealerMsg>Dealer not found.</DealerMsg></Table>"
            End If
            sXMLDealerResults = sXMLDealerResults.Replace("<NewDataSet>", "")
            sXMLDealerResults = sXMLDealerResults.Replace("</NewDataSet>", "")
            If (sDID.Length > 0) Then
                sXMLDealerResults = sXMLDealerResults.Replace("<Table>", "")
                sXMLDealerResults = sXMLDealerResults.Replace("</Table>", "")
            Else
                sXMLDealerResults = sXMLDealerResults.Replace("<Table>", "<Dealer>")
                sXMLDealerResults = sXMLDealerResults.Replace("</Table>", "</Dealer>")
            End If
            sXML = "<?xml version=""1.0"" ?><DealerFetch>" + sXMLDealerResults.Trim + "</DealerFetch>"
            'If sReturn.Trim.Length = 0 Then
            '    Response.ContentType = "text/xml"
            '    Response.Write(sXML)
            'End If
            sqlConn.Close()
            sqlConn = Nothing

            Return sXML

        Catch exp As Exception
            sErr = sErr & " " & exp.Message.ToString
        End Try
    End Function
End Class

Любая помощь будет оценена. Может быть, это что-то очевидное, что кому-то здесь быстро покажется, но это наверняка заставит нас волноваться Если вам нужна дополнительная информация или код, пожалуйста, сообщите нам.

1 Ответ

1 голос
/ 09 октября 2011

Есть тонн хороших образцов и демонстраций, как этого добиться .......

Всего несколько быстрых поисков в Google:

Я бы просто поискал в Google ваши ключевые слова (ASMX, WCF, Migrate), и вы должны получить тонны ссылок и полезных ресурсов .....

Что касается ресурсов для изучения основ WCF: есть MSDN WCF Developer Center , в котором есть все - от учебников для начинающих до статей и примеров кода.

Кроме того, обратитесь к библиотеке для кастинга в MSDN , чтобы получить действительно полезную 10-15-минутную порцию информации практически по любой теме, связанной с WCF, которая может вас заинтересовать.

...