【问题标题】:WebServiceHostFactory and IIS authenticationWebServiceHostFactory 和 IIS 身份验证
【发布时间】:2010-10-09 04:03:35
【问题描述】:

我在 IIS 中使用 WebServiceHostFactory 时遇到问题。

"IIS 指定了身份验证方案 'IntegratedWindowsAuthentication, Anonymous',但绑定只支持指定一个身份验证方案。有效的身份验证方案是 Digest、Negotiate、NTLM、Basic 或 Anonymous。更改 IIS 设置,以便只有一个身份验证方案使用了身份验证方案。”

I wanted to keep both authentication schemes and managed to do so by not using the factory but setting up the endpoint manualy in web.config.

我的问题是 WebServiceHostFactory 做了什么来得到这个结果?我的印象是 WebServiceHostFactory 会将绑定设置为我在配置中使用的相同 webHttpBinding。

编辑: 我在反射器中查看了 WebServiceHostFactory 并没有做任何聪明的事情。它只是 WebServiceHost 的一个简单工厂。

如果您在配置中设置端点,IIS 是否仍使用服务主机?还是 WebServiceHost 设置不同。

【问题讨论】:

    标签: wcf


    【解决方案1】:

    这对我有用。尽早(在打开服务主机之前)添加一个虚拟端点,如下所示似乎已经成功了。 (这篇 MSDN 文章暗示了这个 http://msdn.microsoft.com/en-us/library/bb412178.aspx。)

    public class MyWebServiceHost : WebServiceHost
    {
        public MyWebServiceHost (Type serviceType, params Uri[] baseAddresses) : base(serviceType, baseAddresses)
        {
            // Inserting this dummy endpoint config seemingly does the trick:
            AddServiceEndpoint(typeof(IMyContract), new WebHttpBinding(), string.Empty);
        }
    
        protected override void ApplyConfiguration()
        {
            // Typical programmatic configuration here per:
            // http://msdn.microsoft.com/en-us/library/aa395224.aspx
        }
    }
    

    我猜这会阻止 WebServiceHost 创建默认端点,从而关闭一堆功能。

    【讨论】:

    • 我无法测试这个答案,因为不久前有人问过这个问题,我解决了这个问题然后找到了一份新工作,但如果你说它有效,那对我来说已经足够了。
    • 我不明白应该在哪里引用 MyWebServiceHost
    • 我遇到了同样的问题,我能够让它工作。我必须编写两个类:MyWebServiceHostFactoryMyWebServiceHost。在工厂类中,我覆盖了ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 方法并让它返回MyWebServiceHost 的一个实例。 MyWebServiceHost 看起来像这个答案中的那个,但我没有覆盖 ApplyConfiguration()
    【解决方案2】:

    我不确定 WebServiceHostFactory,但听起来您在 IIS 中托管服务,并且选择了不止一种身份验证方法。如果您有 IIS 5 或 6,请尝试进入 IIS 并查看包含您的服务的网站或虚拟目录的属性。转到目录安全选项卡,单击“匿名访问和身份验证控制”下的编辑按钮,然后取消选中“匿名访问”或“集成 Windows 身份验证”。我不确定 IIS7。

    【讨论】:

    • 问题在于您无法调试匿名访问的网站不满意 的解决方法是在 IIS 中调试打开另一个身份验证之前使用单个身份验证进行编译。这可行,但既浪费时间又烦人。我已经看到 .NET 3.5 网站开发多年,但从未发生过这个问题。对于 .NET 4 站点,我的体验更糟。 (有可能从 MSBuild 文件中更改网站身份验证,但我找不到现成的构建任务来执行此操作。)
    • 抱歉,据说他想保留这两种身份验证方案...您的回答在这方面没有帮助。
    【解决方案3】:

    在 IIS7 下,您可能找不到可以管理集成 Windows 身份验证设置的位置。要查看 IIS7 管理控制台中的设置,您需要按照以下文章中描述的步骤进行操作:http://msdn.microsoft.com/en-us/library/x8a5axew.aspx(标题为“错误:由于未启用集成 Windows 身份验证而导致调试失败”,如果链接不起作用)。

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

      在 web.config-> 配置标签中禁用安全性

        <system.serviceModel>
          <bindings>
            <webHttpBinding>
              <binding>
                <security mode="None">
                  <transport clientCredentialType="Windows"/>
                </security>
              </binding>
            </webHttpBinding>
          </bindings>
        </system.serviceModel>
      

      那么您的 wcf 服务不需要身份验证...

      【讨论】:

      • 这只是一些代码......请提供一些解释。这不是问题的答案。
      • 在提供答案时,您确实需要提供某种形式的解释(而不仅仅是代码示例)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多