2011-05-20 90 views
1

我在托管我的Silverlight应用程序的IIS Web服务器的虚拟框上运行Windows Server 2008。当我尝试从localhost:80上的服务器(VM)浏览应用程序时,一切正常,并找到服务。但是,当我尝试从网络上的另一台计算机上浏览应用程序时,可以看到主屏幕和silverlight加载了所有内容,但在调用服务时,出现异常:Silverlight 4服务

SCRIPT5022:Silverlight应用程序中的未处理错误操作过程中发生异常,导致结果无效。检查异常详情的InnerException。在System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 在alisaWebApp.SecurityService.EncryptCompletedEventArgs.get_Result() 在alisaWebApp.LoginPage.securityClient_EncryptCompleted(对象发件人,EncryptCompletedEventArgs E) 在alisaWebApp.SecurityService.SecurityServiceClient.OnEncryptCompleted(对象状态)

不太确定这可能意味着什么,但我的猜测是该服务无法找到?但是不应该从Web服务器调用服务,并且当我从服务器运行应用程序时,一切都可以正常工作。也许我错过了端口转发的东西?任何帮助,将不胜感激。

+0

您是否检查了内部异常的细节? Silverlight应用程序正在客户端机器上运行,如果您在Silverlight应用程序的应用程序配置中使用对localhost的服务引用,那么您最终还会寻找在客户端计算机上运行的服务。这在您在Web服务器上运行应用程序时起作用,因为Web服务器也是客户端。 – 2011-05-20 23:28:24

+0

俄狄浦斯,这工作,但现在当我尝试从服务器访问该网站,它不工作:D。有没有什么方法可以“检测”使用什么参考?我的意思是服务器必须是'localhost',而客户端的服务器的IP地址是正确的? – Ryan 2011-05-21 00:00:26

回答

0

您可能会遇到跨域异常。 SilverLight应用程序托管在本地主机时,不会强制执行与服务访问相关的安全性。

如果这是正确的,请参阅cross domain access上的这篇文章。

2

如果您在Silverlight代码中调用服务,则将从用户浏览器中运行的Silverlight应用程序调用该服务。您需要通过http或https使用clientaccesspolicy.xml来允许特定的IP或所有IP访问服务。

<?xml version="1.0" encoding="utf-8"?> 
    <access-policy> 
     <cross-domain-access> 
      <policy> 
       <allow-from http-request-headers= "SOAPAction"> 
        <domain uri="http://*"/> 
       </allow-from> 
       <grant-to> 
        <resource path="/" include-subpaths="true"/> 
       </grant-to> 
      </policy> 
     </cross-domain-access> 
    </access-policy> 

该文件需要位于Web应用程序的根目录中。

除非您希望整个世界能够使用您的服务,否则您可能还想设置一些安全性。

另一个问题可能是ClientConfig文件。如果当前设置为本地主机(到您的服务器IP),您需要在那里更改服务端点地址。