Silverlight Webservice调用在Studio中工作,但在从网站运行时失败

时间:2011-02-24 16:02:21

标签: silverlight wcf web-services serialization

我们正在构建Silverlight应用程序并调用Silverlight-WCF服务。从Visual Studio运行应用程序时,一切都很完美。当我们部署到网站并运行应用程序时,每次调用Web服务时都会出现以下错误(或类似错误)。

Message: Unhandled Error in Silverlight Application An exception occurred during the operation, making the result invalid.  Check InnerException for exception details.   at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
   at SSS.MVVMCore.Silverlight.WebPortalService.GetThemeIdCompletedEventArgs.get_Result()
   at SSS.MVVMCore.Silverlight.ViewModels.StandardBaseFrameViewModel.<.ctor>b__0(Object s, GetThemeIdCompletedEventArgs ea)
   at SSS.MVVMCore.Silverlight.WebPortalService.WebPortalServiceClient.OnGetThemeIdCompleted(Object state)
Line: 1
Char: 1
Code: 0
URI: http://ssswebportal.com/login.aspx?p=d53ae99b-06a0-4ba7-81ed-4556adc532b2

基于他的消息,该服务被调用,完全执行,但是当它试图在Silverlight应用程序中反序列化结果时出现问题。有关正在发生的事情以及我们可以采取哪些措施来解决问题的任何建议?

&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT; &LT;&LT;&LT;&LT;&LT;&LT;跟进&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &GT;&GT;&GT;&GT;

这是我们的决议:

在ServiceReferences.ClientConfig文件中,我们有以下代码:

<client>
  <endpoint address="http://localhost:5482/WebPortalService.svc"
      binding="customBinding" bindingConfiguration="CustomBinding_WebPortalService"
      contract="WebPortalService.WebPortalService" name="CustomBinding_WebPortalService" />
</client>

注意'localhost'行。我们发布时它需要是我们的Web服务器地址,但在开发时需要是localhost。

任何人都有关于如何自动完成此操作的任何建议,以便我们不必在每次发布之前手动更改此行?

2 个答案:

答案 0 :(得分:2)

您需要做两件事。

首先,在网站上提供clientaccesspolicy.xml and/or crossdomain.xml个文件。 This MSDN article有详细信息。我还发现this blog entry很有用。

其次,确保您的服务引用端点指向正确的URL。对于我的项目,我有不同的构建配置(发布,调试,测试,测试版等)和几个端点。然后,我在代码中使用#if指令选择适当的端点。

例如:

    soapClient =
#if DEBUG
        new MySoapClient("DebugService");
#elif TESTRELEASE
        new MySoapClient("TestService");
#elif BETA
        new MySoapClient("BetaService");
#else
        new MySoapClient("ReleaseService");
#endif

答案 1 :(得分:0)

当WCF服务部署在与应用程序位置相关的不同域中时,通常会发生这种情况。如果这是一个临时的情况,有同一个域的服务和应用程序将解决。如果无法在应用程序上为远程服务创建代理,则可以正常工作。