【问题标题】:Silverlight WCF services not returning any data from database, after deploying on serverSilverlight WCF 服务在服务器上部署后未从数据库返回任何数据
【发布时间】:2015-02-09 16:09:00
【问题描述】:

我有一个 Silverlight 应用程序,它使用 wcf 服务不使用实体框架从数据库(SQL Server)读取数据,只需单击一个按钮。我部署在我的本地系统上,它工作正常。我在服务器上部署并发布了它。我打开页面并单击按钮以获取数据。但它不显示数据,也不显示任何错误。 我很困惑可能是哪方面的问题。

【问题讨论】:

  • 您是否在 .web 项目中添加了启用 silverlight 的 WCF 服务,或者您正在从其他项目访问该服务?
  • 您好 Zafar,我没有从其他项目访问 WCF 服务。它在我的 Silverlight 应用程序中。谢谢。
  • 如何生成代理来访问服务。是通过引用自动生成的代理还是您有一些客户代理生成。请发布用于生成代理的 URI。如果可能,发布您的 servicereferences.clientconfig 文件的内容。
  • localhost:52731/Service1.svc" binding="basicHttpBinding" bindingConfiguration= "BasicHttpBinding_IService1" contract="ServiceReference1.IService1" name = "BasicHttpBinding_IService1" />
  • 嗨 Zafar,上面是我的 servicereferences.clientconfig 文件,它指的是自动生成的代理。

标签: wcf silverlight


【解决方案1】:

这在大多数情况下可能是由数据库访问引起的。因此,以下步骤可能对您有所帮助:

  • 检查您的 WCF 服务是否可访问。
  • 检查WCF配置中的连接字符串是否正确。

【讨论】:

  • 嗨.. 感谢您的快速回复。您现在可以告诉我如何检查 WCF 服务是否可以访问...?我想连接字符串不会有问题,因为它可以在我的本地系统上正常工作。我也试过在本地机器的 IIS 中部署我的应用程序,它工作正常。
  • 下面是我在我的应用程序中使用的 ConnectionString 代码。
  • 代码 4 web.config 文件:
【解决方案2】:

如果要查看WCF服务,有两种方法:

【讨论】:

  • 嗨。我只是尝试创建一个非常简单的 wcf 应用程序。那就是单击按钮,我试图在页面上打印“Hello World”。我发布了该服务,并且它再次在我的本地系统上运行良好,但是当我尝试在服务器上部署时它没有。这个应用程序非常简单,没有复杂性,没有数据库连接,什么都没有。但仍然无法从服务器调用服务。检查服务,(Service1.svc -。右键单击 - > 浏览)工作正常,但为什么它无法通过应用程序调用,我不知道。它现在变得越来越混乱。对此一无所知。
【解决方案3】:

听起来您的 IIS 无法处理 .svc 请求。

如果是这种情况,您也许可以在这里找到一些东西 - WCF Service Deployment in IIS Page cannot be displayed and how does the SVC file work?

【讨论】:

    【解决方案4】:

    您可以在代码中生成代理,如下所示

    假设您通过添加服务引用自动生成了代理。

    当您尝试访问 WCF Web 方法时,您需要一个服务客户端。可以说它的 SomeProxyClient。

    在您的数据服务类/任何地方,您获取 SomeProxyClient 类型的属性

    在属性的 getter 方法中,使用您的 WCF 服务 URL 尝试以下代码

    私有 SomeProxyClient _proxy;

    SomeProxyClient Proxy
        {
    
            get
            {
    
                if (_proxy == null)
                {
                    var binding = new BasicHttpBinding
                    {
                        MaxReceivedMessageSize = 2147483647,
                        MaxBufferSize = 2147483647
    
                    };
    
                    Uri uri = null;
                    if (!System.ComponentModel.DesignerProperties.IsInDesignTool)
                    {
                        hostName = HtmlPage.Document.DocumentUri.Host;
                        portNo = HtmlPage.Document.DocumentUri.Port;
    
                            uri = new Uri("http://" + hostName + ":" + portNo.ToString() + "/y/x.svc");
    
                    }
                    else
                    {
                        uri = new Uri("http://localhost:2700/x.svc");
                    }
    
                    _proxy = new SomeProxyClient(binding, new EndpointAddress(uri));
                    _proxy.Endpoint.Binding.CloseTimeout = new TimeSpan(01, 20, 10);
                    _proxy.Endpoint.Binding.ReceiveTimeout = new TimeSpan(01, 20, 10);
                    _proxy.Endpoint.Binding.SendTimeout = new TimeSpan(01, 20, 10);
                    _proxy.Endpoint.Binding.OpenTimeout = new TimeSpan(01, 20, 10);
    
                    return _proxy;
                }
                return _proxy;
            }
        }
    

    然后通过使用此变量,您可以访问您的 WCF Web 方法。

    通过这种方式,您不必一直接触服务引用,即从开发到生产部署。它将自动获取相应的服务器和端口地址。

    希望对你有帮助

    【讨论】:

    • 嗨 Zafar,我不太擅长这个。我理解编写用于生成代理和所有的手动代码的原因。但是你也可以帮忙吗,比如我应该在哪里编写这段代码,我应该从哪里调用它?同样在上面的代码中,“SomeProxyClient”的确切含义......非常感谢您的帮助。再次感谢...
    【解决方案5】:

    实际上,问题在于在 web.config 文件中设置端点地址,并且随着服务被部署到其他机器上,应用程序的 URL 也发生了变化。所以我做了一些重要的更改如下: 1. 在 web.config 文件中提供端点地址、端点名称和合同详细信息,与 ServiceRefrence.ClientConfig 文件中的相同。 2. 更改 ServiceRefrence.ClientConfig 中的端点地址,无需特定端口详细信息:http://Localhost/..... 而不是http://Localhost:56279/.....and 3. 在应用程序中编码以获取执行它的机器的 URI 地址,以便无论应用程序部署在哪里,用户都有不用担心 localhost 地址及其端口详细信息:Uri servUri = new Uri("../Service.svc", UriKind.Relative); EndpointAddress servAddr = new EndpointAddress(servUri); ServiceReferenceForSelect.ServiceForSelectClient objSelect = new ServiceForSelectClient("BasicHttpBinding_IService", servAddr); 这解决了问题。谢谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2010-09-26
      相关资源
      最近更新 更多