2

我有一个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 文件。

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

4

1 回答 1

1

我怀疑这localhost:1794会导致问题 - 当 silverlight 应用程序在客户端计算机上执行时,本地主机不会将其返回到服务器。

我用来消除此类问题的技术是在运行时以编程方式设置端点。我需要的两条信息是服务的 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");

我的实际设置比这稍微复杂一些,因为我也希望能够覆盖它并手动配置端点,但你明白了。通过这样做,我已经能够部署到各种设置,网络服务器在奇数端口上运行,silverlight-> webservice 位每次都可以正常工作。

于 2010-02-05T22:39:11.330 回答