【问题标题】:Hosting WCF web services on IIS - works in VS, but not in IIS在 IIS 上托管 WCF Web 服务 - 在 VS 中有效,但在 IIS 中无效
【发布时间】:2010-02-03 17:28:47
【问题描述】:

我是网络编程方面的新手,所以我的问题是关于基础知识的。我正在开发一个 SilverLight 应用程序,需要从中访问数据库。我正在使用 LINQ to SQL 从数据库和 WFC Web 服务获取数据以将其传送到我的应用程序。

当我在 Visual Studio 中运行我的应用程序时,一切正常。尝试将 Web 服务发布到 IIS 时 - Web 服务调用失败。

为了让我的问题简单,我将专注于一个全新的网络服务。这是我正在做的步骤:

  1. 启动 Visual Studio 2008 -> 文件 -> 新建 -> 项目 -> Web -> WCF 服务应用程序 项目名称:MyWcfService

  2. 生成的 Visual Studio 生成一个示例项目,其中包含已实现的 Web 服务“Service1”

  3. 重建,从 Visual Studio 开始(托管在 ASP.NET 开发服务器上) --> 一切正常,我在http://localhost:52489/Service1.svc 链接下看到了我的服务

  4. 现在我想在我的 IIS 上托管此服务(我在 Vista x86 PC 上安装了 IIS7) Visual Studio -> 右键单击​​项目 -> 发布 -> 目标位置 -> 创建名为“MyWcfService”的新 Web 应用 -> 发布

  5. 请务必检查我的 C:\inetpub\wwwroot\ 文件夹 - 现在它包含包含所有必需文件的“MyWcfService”子目录。

  6. 在我的电脑上打开 IE http://localhost/MyWcfService/Service1.svc

结果是:

HTTP 错误 404.3 - 未找到 由于扩展配置,无法提供您请求的页面。如果 > 页面是脚本,则添加处理程序。如果要下载文件,请添加 MIME 映射。

我试图从 web.config 中删除“身份”部分 - 同样的问题。关闭防火墙也无济于事。

谁能帮帮我?我做错了什么?也许我错过了什么?

【问题讨论】:

    标签: asp.net wcf silverlight web-services


    【解决方案1】:

    Per Nicholas Allen,WCF/WWF 项目经理,Silverlight @ Microsoft:

    IIS 中的哪些注册负责处理 SVC 文件?
    注册分为两部分。一部分与 ASP.NET 相关,另一部分与 WCF 相关。 ASP.NET 部分是 ASP.NET ISAPI 必须是 IIS 的服务扩展。 WCF 部分是 HTTP 处理程序必须是托管处理程序。

    用于设置这两个部分的命令是 2.0 框架工具中的“aspnet_regiis –i –enable”和 3.0 框架工具中的“ServiceModelReg.exe -r”。

    这会产生一个托管处理程序“System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”和一个 ISAPI 模块“%SystemRoot%\Microsoft.NET\Framework\v2。 0.50727\aspnet_isapi.dll" 用于 IIS 中的 *.svc 文件。在 IIS 处理程序映射中,托管处理程序必须位于 ISAPI 模块之上才能工作。

    这两个部分一起启动 HTTP 管道并将生成的请求传递到 WCF。

    【讨论】:

    • 尊敬的微软:感谢您的回答,但请帮助我们解决这个问题。随着您发布更多版本的 WCF、IIS、.NET、Windows 等,您正在使我们和客户的生活陷入地狱。只需在谷歌上搜索类似这样的问题,您就会发现这对我们这么多人来说是一个多么大的问题。与这些东西相比,“DLL 地狱”简直是小菜一碟!
    【解决方案2】:

    默认情况下,IIS 只会将某些文件(如 aspx)的请求定向到 ASP .NET。我猜您没有将 svc 扩展名映射到 asp .net。试试看这个http://msdn.microsoft.com/en-us/library/bb515343.aspx

    【讨论】:

      【解决方案3】:

      Silverlight 只能调用与应用程序完全相同的域中的 Web 服务(xap 文件所在的位置)

      要调用不同的域,您需要有一个 web 服务所在的 clientaccesspolicy.xml 文件。这可能是你的问题。

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

      【讨论】:

        【解决方案4】:

        您可能没有在 IIS 中正确设置 ASP.Net。看看这篇文章:

        http://msdn.microsoft.com/en-us/library/aa964620.aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-04
          • 1970-01-01
          相关资源
          最近更新 更多