2010-08-24 162 views
2

我一直在尋找這個答案,所有我發現的是這link,但是當我試圖按照教程,我失敗了。我需要的是將我的Silverlight應用程序連接到數據庫,以顯示特定表中的信息。因爲我不想爲我的頁面和我的silverlight應用使用相同的ORM,所以我創建了一個新的WCF webservice項目,並在其中創建了我的LINQ to SQL類。如何將我的Silverlight應用程序連接到WCF服務?

我測試了我的WCF服務,它工作正常,但不知怎的,我的Silverlight應用程序沒有達到它。我更改了web.config文件,現在看起來如下所示。

我的web.config

<?xml version="1.0"?> <configuration> 

    <connectionStrings> 
    <add name="bd_webportosConnectionString" connectionString="Data Source=BARNEY\DEV;Initial Catalog=bd_webportos;User ID=sa;Password=Stigeo_1_adm_1" 
     providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> 
    <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="basicHttpBindingConfig"> 
      <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Ntlm"/> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:7298/DataToSilverlight.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1" 
      contract="DataRetrieverReference.IService1" name="BasicHttpBinding_IService1" /> 
    </client> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information 
--> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration> 

我不知道如何解決這個問題。雖然我陷入困境,但我努力繼續前進,但隨後又陷入了下一步,那就是將服務引用添加到我的Silverlight應用程序中。當我嘗試做它說,將顯示以下信息:

有從下載地址 元數據的錯誤。請 確認您已輸入有效的 地址。

我通過WCF測試客戶端測試了該服務,它工作正常,但我的silverlight應用程序無法訪問它。我得到以下異常:

,同時努力使 到URI 「http://localhost:7298/DataToSilverlight.svc」的請求時發生錯誤。 這可能是由於嘗試以 以跨域方式訪問服務 而沒有適當的跨域策略 或者是不適合SOAP服務的 策略。您可能需要 聯繫 服務的所有者以發佈跨域 策略文件並確保允許發送與SOAP相關的HTTP標頭 。 此錯誤也可能是由於在Web服務 代理中使用 內部類型而不使用 InternalsVisibleToAttribute屬性造成的。 請參閱 的內部例外更多詳情。

你們能幫我解決這個大問題,或者甚至用另一種方式來實現我想要的嗎?

我最近也發現我的crossdomain.xml沒有加載......但我不知道這意味着什麼。

+0

您應該將標題更改爲「如何將Silverlight連接到WCF服務?」因爲這與數據庫無關,而是與客戶端服務器通信。 – 2010-08-24 19:04:44

回答

0

根據MSDN<services>標籤應位於<system.serviceModel>標籤內。在那裏複製整個模塊。

編輯:關於連接到數據庫部分。

除非您創建WCF Data Service/OData,否則Silverlight無法通過WCF服務神奇地「查詢」數據庫。要以簡單直接的方式從數據庫獲取數據到Silverlight客戶端,您需要在WCF服務中創建方法,該方法根據WCF方法的參數查詢數據庫,並將其包裝在合適的數據結構中(List<Customer>例如你鏈接)並將結果返回給Silverlight客戶端。

您收到的錯誤「從地址下載元數據時出錯,請驗證您是否輸入了有效地址。」不是與數據庫相關的錯誤,它是一個錯誤,告訴您無法找到您的WCF服務。無論您的WCF服務是否使用數據庫,都會發生這種情況。

看起來好像WCF服務中可能存在進一步的配置錯誤,這也許可以解釋爲什麼無法添加對服務的引用。你的對話框如何對應於「圖3-13。添加對Web服務的引用」?您可以編輯您的問題並插入屏幕轉儲。

+0

我猜,這解決了第一部分,但我的問題的第二部分仍未得到答覆。我從來沒有從事這種事情,我對此有點困惑。爲什麼說它與數據庫無關,如果它是一種鏈接它們的方式? – 2010-08-24 19:26:13

+0

@Bruno:錯誤與你的數據庫無關,無論你是否有數據庫,你都會得到錯誤。我更詳細地編輯了我的答案。您也可以嘗試啓動您的項目,並查看是否存在與web.config或與您的服務相關的其他相關錯誤。 – 2010-08-24 20:16:42

+0

WCF的作用似乎讓你感到困惑。 WCF不僅僅是一個數據庫接口,它更像是一個通用的服務/服務器。它可以用於很多事情。從數據庫中讀取數據只是用WCF服務完成的許多事情之一。 – 2010-08-24 20:21:28

0

你可以試試這個方法:

http://www.dotnetspider.com/tutorials/Silverlight-Tutorial-315.aspx

簡單和容易。

+0

我這樣做了,但沒有奏效。我的方法,獲取數據庫信息沒有達到我的處理程序。此外,代碼稍有不同: webService.GetDataCompleted + = new EventHandler (webService_GetDataCompleted); – 2010-08-26 16:55:52

+0

爲了您的利益,我希望您不要忘記在事件初始化之後添加以下行: webService.GetDataASync(); – Sam 2010-08-26 21:25:56

+0

我沒有忘記它。 – 2010-08-27 17:48:03

1

Silverlight運行在非常沙盒環境中。所以當我們想要從silverlight應用程序調用WCF服務時,我們必須在IIS的根目錄和應用程序導向器中部署簡單的policy.xml和crossdomain.xml。如果您從VS studio webserver運行Silverlight應用程序,並且WCF託管在VS內部Web服務器中,那麼您將不會遇到此類問題。

相關問題