【问题标题】:ipaddress:port vs localhost:port when hosting silverlight Prism with WCF on IIS 7在 IIS 7 上使用 WCF 托管 silverlight Prism 时的 ipaddress:port vs localhost:port
【发布时间】:2013-01-24 18:04:30
【问题描述】:

这可能很简单,但请耐心等待。

当我将我的 Silverlight 5 应用程序与 WCF 部署到 IIS 时,使用简单的复制和粘贴技术我可以完美地浏览网站,但是当我尝试通过像 192.168 这样的 ipaddress 访问它时。 1.3:8099 每次服务调用都会返回如下错误:

An exception occurred during the operation, making the result invalid.  Check InnerException for exception details.
  at .....
  at <MyNamespace>.OnGetSomethingFromDataBaseCompleted(Object state)

我可以成功地从其他机器定位 WCF 服务 (192.168.1.3:8099/SomeService.svc)。 我编写了测试控制台应用程序来调用(并关闭)该服务,它正确地从远程 DBServer 获取了一些数据。 然而在浏览器中什么都没有。

当导航到 192.168.1.3:8099 时,A 应该从浏览器添加回 Fiddler 不会注册此调用,但它会从 localhost:8099 注册。

你能帮忙吗?

我认为对于比我更有部署经验的人来说,这是一个简单的问题,但如果您认为应该这样做,请继续阅读。


所以你正在阅读 =>(棱镜)。

我有一个 Silverlight 应用程序,它连接到调用 WCF 服务的数据库(添加为 Silverlight WCF 服务 - VSTemplate)。

在这个应用程序中,我介绍了像 Jeremy Likness 这样的 Prism 在他的 blog 上建议

我还使用 Web 代理从 ViewModel 访问 WCF 服务。

我的项目结构:

  • WEB项目
  • SilverlightAppWithShell
  • 模块A
  • 模块B
  • 普通项目

部署目录结构:

C:\inetpub\wwwroot\MyAppFolder(IIS 用户可以访问它)

  • .\bin\AllDlls
  • .\ClientBin\AllXapFiles(来自上述所有项目的XAP文件)
  • .\Services\All *.cs 文件定义服务操作合同
  • .\Web.config
  • .\TestPage.html
  • .\TestPage.aspx
  • .\Silverlight.js
  • .\AllServices *.scv 文件

最后但并非最不重要的一点

  • .\clientaccesspolicy.xml

里面有这段代码:

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>"
      </allow-from>
      <grant-to>
        <resource path="/Services" include-subpaths="true"/><!--I tried with App_Code here when renaming Services dir to App_Code with the same wain result-->
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

感谢您的阅读

【问题讨论】:

  • 我目前正在查看this,如果有帮助,我会告诉你。

标签: c# wcf silverlight iis prism


【解决方案1】:

在 Carlos Figueira 的 this 帖子之后,这就是我最终所做的并解决了我的问题。我不确定 Silverlight 5 是否有更好的解决方案,但它对我有用。

public static void UpdateMyServiceAddress(WebServiceMyProxies.MyServiceClient client)
        {
            client.Endpoint.Address = UpdateServiceAddress(client.Endpoint.Address.Uri.ToString());
        }

private static System.ServiceModel.EndpointAddress UpdateServiceAddress(string originalAddress)
        {
            int svcIndex = originalAddress.IndexOf(".svc");
            int serviceNameIndex = originalAddress.LastIndexOf('/', svcIndex);
            string serviceName = originalAddress.Substring(serviceNameIndex + 1);

            string baseAddress = Application.Current.Host.Source.ToString();
            baseAddress = baseAddress.Substring(0, baseAddress.LastIndexOf('/')); // removing /App.xap
            baseAddress = baseAddress.Substring(0, baseAddress.LastIndexOf('/')); // removing /ClientBin

            return new System.ServiceModel.EndpointAddress(String.Format("{0}/{1}/{2}", baseAddress,"Services", serviceName));
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 2011-07-21
    • 2013-10-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    相关资源
    最近更新 更多