2010-02-05 43 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位每次都能正常工作。

相关问题