2011-10-09 58 views
1

我們的網站保持與VS2003。我們將我們的解決方案轉換爲VS2010 - 這是一個Web應用程序項目。它有我們希望轉換爲WCF分兩個階段,第一是保留通過AJAX寫回的XML文檔到客戶端...的ASMX文件的功能,然後學習如何構建多個Web服務文件(.asmx文件結尾)支持AJAX的WCF服務可以做同樣的事情。遷移Web服務(VS2003)到WCF(VS2010)

我們已經研究了「無法創建類型xxx'錯誤和意見各不相同。我們確信(!!)擁有一個App_Code文件夾並不是什麼區別,並且我們正確地命名了我們的命名空間和類,並且我們已經正確地裝飾了Web服務代碼,並且我們能夠使用ASP.Net 2.0來激活這些服務,並且我們已經在IIS中正確設置了應用程序級別......並且我們仍然無法克服這個錯誤。

這是我們的ASMX代碼(我們創建了ScriptManager控件測試頁,嘗試打這個Web方法,但我們從來沒有得到過建立服務)。你當然不需要費心與實際的數據庫拉,但是我離開了他們,無論如何:

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 

任何幫助,將不勝感激。也許這是一件很明顯的事情,很快就會出現在這裏的某個人,但它肯定會讓我們煩惱!如果您需要更多信息或代碼,請告訴我們。

+0

我希望你沒有轉化這些是網絡現場「項目」。繼續使用Web應用程序項目。網站是非常有限的,幾乎總是一個壞主意。 –

回答

1

噸良好的樣品和演示如何實現這一目標的 .......

短短几年的快速谷歌搜索打開了:

我只是谷歌搜索關鍵字(ASMX,WCF,遷移),你應該得到噸鏈接和有用的資源.....

至於資源學習WCF的基礎知識:還有的MSDN WCF Developer Center這擁有從初學者的教程到文章和示例代碼的所有內容。

此外,檢查出的screen cast library up on MSDN對一些信息的真正有用的,10-15分鐘的塊在幾乎與WCF的任何話題,你可能會感興趣。