部署的Silverlight启用WCF服务停止在停止开发服务器时工作

时间:2009-10-02 03:25:06

标签: silverlight silverlight-3.0

我有一个Silverlight业务应用程序,可以从支持Silverlight的webservice获取数据。

当我在开发环境中运行应用程序时,它工作正常。 当我部署应用程序并且Asp.net Web开发服务器正常工作时,那么应用程序运行正常。

但是当我停止开发服务器时,应用程序无法访问服务。

我的问题是:

当我部署Silverlight业务应用程序时,服务是否已部署并开始使用。

我的ServiceReferences.Clientconfig文件中的端点地址是端点地址=“http:// localhost:9702 / MyWebservice.scv。我是否需要更改此设置?

web.config中的enpoint地址为空。

感谢您的帮助

4 个答案:

答案 0 :(得分:2)

因为WCF客户端代码被声明为“部分”类,所以我一直在做的是创建另一个c#partial类文件来托管它的GetClient()方法。您会注意到代码考虑了服务所在的端口...在我发布或将要发布的一些环境中,以及开发环境中,应用程序并不总是如此在80号港口。

Namespace Project.Service
{
    public partial class ServiceClient
    {
        public static ServiceClient GetClient()
        {
            return new ServiceClient("CustomBinding_Service",
                new System.ServiceModel.EndpointAddress(new Uri(string.Format("{0}://{1}:{2}/Services/Service.svc",
                    Application.Current.Host.Source.Scheme, Application.Current.Host.Source.Host, Application.Current.Host.Source.Port), UriKind.Absolute)));
        }
    }
}

希望这有助于某人!

答案 1 :(得分:1)

是的,您将要更改您的终端地址。我建议在创建与WCF服务的连接时在silverlight代码中执行此操作。服务本身存在于Web服务器上,而silverlight应用程序存在于客户端计算机上。如果Web服务器停止,Web服务将停止,但silverlight应用程序可以继续运行。

编辑:
要在代码中执行此操作,只要路径始终与您可以使用的应用程序位于同一个域中,就像这样:

BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None) //Use whatever security you need here  
                {
                    MaxReceivedMessageSize = int.MaxValue,
                    MaxBufferSize = int.MaxValue
                };
Client client = new Client(binding, new EndpointAddress(new Uri(Application.Current.Host.Source, "../MyService.svc")));

答案 2 :(得分:0)

非常感谢你的帮助。我尝试过你的方法来创建客户端代码但是没有用。那是因为问题似乎在其他地方。

所以我安装了fiddler以查看流量​​。

Fiddler表示该服务正在被访问,但http响应代码为302,表明涉及了一些重定向。

我的应用程序的地址就像这个http:/// Silverlightapp /(S(oirppxrwzhlf2a2vbia1ui45))/Default.aspx#/Home,它托管在IIS 6上。

所以我不得不通过在IIS7的机器上安装服务来采用一种解决方法(并且没有像上面的url那样涉及会话ID)。我仍然保留了在IIS 6上托管的silverlight应用程序。

无论如何,总而言之,对于读取该主题的任何人,我做了以下操作来排除故障并解决问题(暂时)

  • 更改了ServiceReferences.ClientConfig文件中的结束点地址。在VS中使用discover选项添加服务时,端点地址属于localhost,必须更改。

  • 使用ServiceModelReg -i命令注册服务模型。 (这解决了我的问题,即我的应用程序只能从开发服务器而不是IIS)

- 在c:] inetpub \ wwwroot文件夹中输入CrossDomain和ClientAccessPolicy文件。

- 使用fiddler来查看http响应代码。我不得不在小提琴手中做任何配置。 将binarymessageEncoding更改为textMessageEncoding,同时托管了ecf服务的silverlight Web项目的web.config文件。我这样做是因为添加了启用Silverlight的wcf服务在web.config文件中创建自定义绑定配置默认情况下使用二进制编码。我需要文本编码来查看fidder中的错误。但这并没有多大帮助,因为我只在fiddler的Inspector> xml选项卡中看到了操作的名称。即使我的问题通过解决方法得到解决,这也是一样的。

感谢您的帮助

答案 3 :(得分:-1)

请勿在代码中执行此操作。否则,如果不重新编译应用程序,您将无法在以后更改它(当地址需要更改时,可能需要多年时间才能丢失源代码:)

将ServiceReferences.ClientConfig中的地址更改为实际托管服务的位置...例如http://example.com/myVdir/MyWebservice.svc

如果以后需要更改地址而不重新编译: - 打开.xap文件(它只是一个带有不同扩展名的zip文件) - 找到.ClientConfig文件并更改地址 - 将其作为.zip文件重新组合并重命名为.xap

另外,我不记得.ClientConfig是否支持相对地址(例如只是“MyWebService.svc”),但如果它支持,它也可能是一个很好的解决方案。