【发布时间】:2010-10-01 17:26:04
【问题描述】:
我的网站上有一个 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
- 内部用户 (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 服务,但如果这是必需的,我会这样做。
【问题讨论】:
-
“不能说话”是什么意思?你得到了什么例外?
-
我同意 Jace Rhea 的观点,如果您能提供更多信息会有所帮助。但是,WCF 和 Silverlight 之间的一个典型问题是在 WCF 服务器上的 IIS 根目录中缺少 clientaccesspolicy.xml 文件。请查看:msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx 或发布更多信息(异常堆栈跟踪)。
标签: asp.net silverlight wcf