Silverlight应用程序无法访问其他计算机上的WCF服务

时间:2010-02-05 22:02:20

标签: wcf web-services deployment publish

我有一个完美运行的silverlight应用程序,可以访问Silverlight应用程序本身托管的WCF服务。它使用的端口是1794。

当我部署到其他服务器(开发或测试或登台)时,应用程序无法访问WCF服务。

这是我的ServiceReference.ClientConfig的片段,如

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

我的根文件夹也包含clientaccesspolicy.xml文件。

我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分: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-&gt; webservice位。