2010-02-05 76 views
2

我有一個完美的Silverlight應用程序,它可以訪問由Silverlight應用程序本身託管的WCF服務。它使用的端口是1794.Silverlight應用程序無法訪問其他機器上的WCF服務

當我部署到其他服務器(開發或測試或分段)時,應用程序無法訪問WCF服務。

這是從我的ServiceReference.ClientConfig片段看起來像

<endpoint address="http://localhost:1794/MyWebService.svc" 
       binding="customBinding" bindingConfiguration="CustomBinding_MyWebService" 
       contract="ConfigMgmtServiceReference.MyWebService" 
       name="CustomBinding_MyWebService" /> 

我的根文件夾中包含clientaccesspolicy.xml文件了。

我該如何克服這個問題?

在此先感謝。

+0

因此,當你從另一臺機器調用WCF組件時,你還在使用本地主機url嗎?那將是一個問題。您需要能夠解決運行該服務的方框。或者我錯過了什麼? – 2010-02-05 22:22:14

+0

Terry, 在構建項目並將其發佈到其他服務器之前,我更改了端點中的地址。 我將其更改爲localhost:1794至servername/virtualfolder。 – SVI 2010-02-05 23:29:01

回答

1

我懷疑localhost:1794會導致這個問題 - 當silverlight應用程序在客戶端機器上執行時,localhost將不會將其返回到服務器。

我用來消除這種問題的技術是以編程方式在運行時設置終點。我需要的兩條信息是服務的Web項目中的位置(提前知道)以及Silverlight應用程序的地址(域)(我可以找到)。

private void initEndpoint(ServiceEndpoint endPoint, string serviceName) 
    { 
     Uri hostUri = Application.Current.Host.Source; 
     string wcfBaseUri = string.Format("{0}://{1}:{2}/WebServices/", hostUri.Scheme, hostUri.Host, hostUri.Port); 

     endPoint.Address = new EndpointAddress(new Uri(wcfBaseUri + serviceName)); 
    } 

在這一段代碼,文件夾/WebServices是我的Web服務位於我的web應用程序中。然後我調用該函數是這樣的:

 LoggingServiceClient loggingService = new LoggingServiceClient(); 
     initEndpoint(loggingService.Endpoint, "LoggingService.svc"); 

我的實際設置比稍微複雜一點,因爲我也希望能夠重寫並手動配置端點,但你明白了吧。通過這樣做,我可以部署到各種設置,在奇數端口上運行Web服務器,並且silverlight-> webservice位每次都能正常工作。

相關問題