【问题标题】:Silverlight ignores WCF path from web.config fileSilverlight 忽略 web.config 文件中的 WCF 路径
【发布时间】:2009-10-23 19:49:45
【问题描述】:

我正在编写一个调用 WCF 服务的 Silverlight 应用程序。

另一个解决方案包含以下 Silverlight 项目:
- 用于托管 silverlight 应用程序的 Web 项目
- Silverlight 应用程序项目
- Silverlight 类库项目,服务参考 WCF

当我在我的本地主机上运行 Silverlight 应用程序时,Silverlight 使用 localhost 调用 WCF 并且工作正常。

然后我发布了服务和 Web 应用程序并将其部署到另一台服务器。 web.config 文件被修改为指向部署的端点地址。

现在,运行 Silverlight 应用程序会查找服务的 localhost url,尽管 web.config 中的端点是已部署服务器的端点。

silverlight 应用程序从哪里查找 svc url? 它似乎没有从 web.config 文件中读取它。但是,看起来更像是在构建/发布过程中将 url 嵌入到程序集中。

有什么想法吗??

感谢阅读!

【问题讨论】:

    标签: .net-3.5 silverlight-3.0 wcf


    【解决方案1】:

    silverlight 应用程序根本不查看托管服务器的 web.config - 这是在服务器端,并且对于在客户端上运行的 silverlight 应用程序不可见。 Silverlight 应用在其自己的 ServiceReferences.clientconfig 文件中或在您在代码中创建本地服务代理时以编程方式指定的 URL 中查找。

    所以,您有两个选择:
    1. 在构建 Silverlight 应用程序的可部署版本之前修改 ServiceReferences.clientconfig。
    2. 使用代码通过 URL 构建您的客户端端点。

    我们使用第二个选项是因为我们喜欢有一个标准的编程接口来配置我们的端点。我们会这样做(当然,如果 MaxValue 是面向公众的服务,则不会使用它):

    公共 ImportServiceClient CreateImportServiceClient() { return new ImportServiceClient(GetBinding(), GetServiceEndpoint("ImportService.svc")); } 公共 ExportServiceClient CreateExportServiceClient() { return new ExportServiceClient(GetBinding(), GetServiceEndpoint("ExportService.svc")); } 受保护的覆盖 System.ServiceModel.Channels.Binding GetBinding() { BasicHttpBinding 绑定 = new BasicHttpBinding(BasicHttpSecurityMode.None); binding.MaxBufferSize = int.MaxValue; binding.MaxReceivedMessageSize = int.MaxValue; binding.SendTimeout = TimeSpan.MaxValue; binding.ReceiveTimeout = TimeSpan.MaxValue; 返回绑定; } protected EndpointAddress GetServiceEndpoint(string serviceName) { 如果(设置 == 空) { throw new Exception("服务设置未设置"); } 返回 新端点地址(ConcatenateUri(Settings.ServiceUri,serviceName)); } protected EndpointAddress GetServiceEndpoint(string serviceName, Uri address) { 如果(设置 == 空) { throw new Exception("服务设置未设置"); } return new EndpointAddress(ConcatenateUri(address, serviceName)); }

    “ImportServiceClient”和“ExportServiceClient”等类是通过创建对我们的 WCF 服务的服务引用而生成的代理。 Settings.ServiceUri 是我们存储我们应该与之交谈的服务器地址的地方(在我们的例子中,它是通过参数动态设置到它所在页面中的 silverlight 插件,但您可以使用您喜欢管理的任何方案这个地址)。

    但是,如果您更喜欢简单地调整 ServiceReferences.ClientConfig,那么您不需要任何这样的代码。

    【讨论】:

      【解决方案2】:

      我在托管 silverlight 的 asp 页面中使用 silverlight 对象的 InitParams 来传递 WCF 服务 url。您可以从 asp 页面中的 web.config 获取 url。它适用于我的情况。

      【讨论】:

        猜你喜欢
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-19
        • 2011-01-20
        • 2019-10-19
        • 2017-07-16
        • 1970-01-01
        相关资源
        最近更新 更多