2011-08-10 93 views
2

我正在編寫我的第一個Silverlight應用程序,它使用啓用Silverlight的WCF服務來檢索數據並將其發送到我的服務器。如何部署啓用Silverlight的WCF服務?

我創建了一個SL應用程序+ ASP.NET MVC網頁來託管SL應用程序。

在MVC應用程序中,我創建了WCF服務,並將其用於SL應用程序。到現在爲止還挺好。

我使用Web部署項目進行部署,它在我的遠程主機上工作,但使用Fiddler我意識到遠程應用程序正在使用開發服務器上的WCF服務(AKA localhost:port)。

我改變了VS中的WCF服務,它現在指向遠程主機,如果我部署解決方案,那麼這麼好。

但是,你知道,現在我的服務點到遠程服務器,並且不工作,因爲我必須創造一個跨域訪問XML(和提琴手對我說,正在對domain.com/crossdomain.xml代替domain.com/virtualdirectory/crossdomain.xml)。

所以我的問題是:我如何處理這個?如果我的項目使用本地服務,並且在部署時使用遠程服務,那就太好了。

我必須手動執行此操作還是有自動方式?

謝謝。

回答

2

端點地址被包括在ServiceReferences.ClientConfig文件,然後將其嵌入在XAP包中的文件的一部分。部署到實時服務器時,必須更新該文件。

解決方法是爲客戶端代理類構建一個工廠方法,該方法根據Silverlight包的地址動態地構建服務地址。 Here是一個指南,其中包含下面的代碼:

public class ServiceUtil { 
    public static PeopleServiceClient GetPeopleServiceClient() { 
     BasicHttpBinding binding = new BasicHttpBinding(
      Application.Current.Host.Source.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase) 
      ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None); 
     binding.MaxReceivedMessageSize = int.MaxValue; 
     binding.MaxBufferSize = int.MaxValue; 
     return new PeopleServiceClient(binding, new EndpointAddress(
      new Uri(Application.Current.Host.Source, "../PeopleService.svc"))); 
    } 
} 

使用這樣的工廠內,您可以將您的應用部署到無需重新配置任何服務器,只要Silverlight的XAP文件和服務都位於相同的方式相對彼此。

0

您應該在服務器的根目錄中添加一個clientaccesspolicy.xml文件。有關更多信息,請參閱此MSDN link。 crossdomain.xml也可以使用,但由於Flash的原因,Microsoft將它放在那裏,因爲Silverlight只支持crossdomain.xml的一個子集,所以首選clientaccesspolicy.xml。

在部署之前,最好使用localhost服務。部署時,可以更改配置文件或編寫代碼以動態查找服務URL。此示例假定該服務與Silverlight XAP具有相同的URL。

string serviceUrl = Application.Current.Host.Source.AbsoluteUri.Substring(0, Application.Current.Host.Source.AbsoluteUri.IndexOf("ClientBin/")) + "Services/DataService.svc"