我们的网站上为我们的客户提供了Silverlight 4.0(ASP.Net 4.0)应用程序。程序加载正常,但无法与创建的WCF服务进行通信。在内部,一切都很好。
Silverlight应用程序托管在IIS 7.5上,内部IP为10.1.1.8,防火墙将现实世界的应用程序重定向到内部IP地址。这部分工作正常。 WCF服务在IP 10.1.1.10上,并且是具有不同IP地址的相同虚拟机。数据库服务器也可以没有问题地进行ping操作。
http://www.ntbuddy.com/images/stackoverflow/SilverlightWcf1.png
服务参考中的服务参考是“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 :(得分:1)
以10开头的IP地址是内部地址,您将无法从防火墙外部访问此地址。
http://en.wikipedia.org/wiki/IP_address
如果查看标有“IANA保留的私有IPv4网络范围”的表格
您需要使用外部IP地址公开您的服务。
答案 1 :(得分:1)
好的,这总共花了六天时间阅读并研究它“点击进入”。我认为Silverlight很容易,这在很大程度上是因为我多年来一直在编写ASP.Net/WinForm应用程序。很多时候,我们会看一个问题,看起来和外观以及我们的生活,我们无法得到解决方案,因为我们专注于单个问题,不要退后一步,看看整体情况。 “Shiraz Bhaiji”只回答了10个系列的IP地址。我知道这一点,但却是让我的思绪摆脱困惑的神奇钥匙。我把所有东西都放在我的白板上并放入路由表,然后在显而易见的解决方案中将自己砸在脑后(例如,外部访客无法看到我的内部10系列网络)。
简而言之,这是我在第一个Silverlight应用程序中学到的东西:
Silverlight在CLIENT上运行,而不是在服务器上运行(例如ASP.Net)。我正在测试我的所有Silverlight与一个已经运行了一年多的ASP.Net应用程序。 Silverlight应用程序在服务器上运行,我无法终身解决为什么我的WCF服务适用于ASP.Net但不适用于Silverlight。作为Silverlight应用程序被下载到客户端,只有在防火墙后面才能看到WCF服务(1)打开防火墙以允许其访问或(2)将服务移动到互联网(确保包括必要的安全性。我确信即使是1和2的组合也有更多的方法。
我选择选项#1将其移动为专用且可见的服务。我使其易于使用,并且在服务中具有安全性的备用端口上。防火墙重定向到我的内部网站,一切都很顺利。因此,如果您正在使用Silverlight,请确保在内部测试时,您也可以在外部启动和测试,如果您要在外部公开它。