2010-10-01 86 views
1

我们的客户在我们的网站上有一个Silverlight 4.0(ASP.Net 4.0)应用程序,供客户验证后使用。该程序加载正常,但无法与创建的WCF服务通话。内部一切都很好。防火墙后的银色和WCF服务

Silverlight应用程序托管在IIS 7.5上,内部IP为10.1.1.8,防火墙将现实应用程序重定向到内部IP地址。这部分工作正常。 WCF服务位于IP 10.1.1.10上,并且是具有不同IP地址的相同虚拟机。数据库服务器也可以顺利通过。

http://www.ntbuddy.com/images/stackoverflow/SilverlightWcf1.png

  • 内部用户(10.1.15.1)可以利用网站就好
  • 外部用户可以没有任何问题访问该网站,除了当他们尝试Silverlight应用程序
  • 当程序被访问,它在10.1.1.10调用Wcf程序。作为内部用户可以看到他们工作正常的Wcf。外部用户不能。
  • 如果我从ASP.Net网页调用相同的例程,网页将返回结果没有问题。

服务引用中的服务引用是“http://10.1.1.10/ServiceReference/Common.svc”,用于下面的例程。

下面是最简单的例程,我向Wcf请求一个自动编号例程的数字。只对内部用户(Silverlight的)

作品

private void BtnAutoNumberClick(object sender, RoutedEventArgs e) 
{ 
    AutoNumber("AUTO"); 
} 

private void AutoNumber(string autoNumber) 
{ 
    var objResult = new CommonClient(); 
    objResult.GetAutoNumberCompleted += new EventHandler<GetAutoNumberCompletedEventArgs>(LoadResultsAutoNumber); 
    objResult.GetAutoNumberAsync(autoNumber, 4, autoNumber); 
} 

void LoadResultsAutoNumber(object sender, GetAutoNumberCompletedEventArgs e) 
{ 
    txtOrderNumber.Text = string.Format("{0}", e.Result.AutoNumber); 
} 

什么我需要在我的Silverlight应用程序改变,使其对外部用户以及内部用户的工作?我想避免让Wcf服务暴露,但如果这是必需的。

+0

什么意思是“不能说”?你有什么异常? – 2010-10-01 17:28:13

+0

我同意Jace Rhea,如果你能提供更多的信息,它会有所帮助。但是,WCF和Silverlight之间的典型问题是缺少WCF服务器上IIS根目录中的clientaccesspolicy.xml文件。请查看:http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx或发布更多信息(异常堆栈跟踪)。 – Maate 2010-10-01 17:43:34

回答

1

以10开头的IP地址是内部地址,您将无法从防火墙外部访问此地址。

http://en.wikipedia.org/wiki/IP_address

如果你看一下表标有“IANA保留的私有IPv4网络范围”

你需要使用一个外部IP地址暴露你的服务。

1

好的,这总共花了六天的时间阅读和学习它“点击”。我想Silverlight会非常容易,这在很大程度上是因为我多年来一直在写ASP.Net/WinForm应用程序。很多时候,我们会看到一个问题,并期待和期待,对于我们的生活,我们无法得到解决方案,因为我们将重点放在单个问题上,不要退后一步,看看整体情况。 “Shiraz Bhaiji”只回答了大约10个系列IP地址,仅供内部使用。我知道这一点,但它是把我的思想从混乱中释放出来的神奇钥匙。我把所有东西都放在白板上,然后放在路由表中,然后用明显的解决方案把自己打在脑后(例如外部访问者看不到我的内部10系列网络)。

简单地说,这就是我对我的第一个Silverlight应用程序的经验教训:

的Silverlight运行在客户端,而不是服务器(例如ASP.Net)。我正在测试我所有的Silverlight,并对照已经运行了一年的ASP.Net应用程序。 Silverlight应用程序在服务器上运行,我不能为我的生活弄清楚为什么我的WCF服务为ASP.Net而不是Silverlight工作。当Silverlight应用程序被下载到客户端时,只有在防火墙后面才会看到WCF服务:(1)打开防火墙以允许其访问;(2)将服务移动到Internet(确保包括必要的安全)。我敢肯定,即使是1和2的组合,也有更多的方法。

我选择了选项#1将它移动到一个专用和可见的服务。我使它很容易获得,并且在替代端口上提供服务中的安全性。防火墙重定向到我的内部网站,一切都很好。因此,如果您使用Silverlight,确保在内部测试时也可以从外部启动和测试,如果您要在外部公开它也是如此。