【问题标题】:WCF service not accessible in Windows Server 2008在 Windows Server 2008 中无法访问 WCF 服务
【发布时间】:2011-05-11 16:52:10
【问题描述】:

我最近构建了一个 WCF 服务,现在我将它部署到 Windows Server 2008。目前,我们没有打开安全协议。但我们会的。我想让它以任何一种方式工作。在该站点中,我启用了匿名身份验证以及表单身份验证。我这样做的原因是为了防止在 iPad、Android 和 Internet Explorer 上弹出身份验证。所以现在他们只是进入登录屏幕。哦,我确实在 Windows 功能中激活了 WCF。如果您也了解如何准备好这个 https,我也想弄清楚这一点。谢谢!!

当我尝试将 *.svc PATH 粘贴到 URL 中时出现此错误。

System.ServiceModel.ServiceActivationException: 服务 '/WCFServices/Accessioning/QuickDataEntryService.svc' 无法激活,因为 编译时异常

到目前为止,这是我的 web.config 配置。

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true">
        <!--<baseAddressPrefixFilters>
            <add prefix="http://localhost/" />
        </baseAddressPrefixFilters>-->
    </serviceHostingEnvironment>
    <behaviors>
        <endpointBehaviors>
            <behavior name="AspNetAjaxBehavior">
                <enableWebScript />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehavior">
                <serviceDebug includeExceptionDetailInFaults="true" />
                <serviceMetadata httpGetEnabled="true" />
            </behavior>
            <!-- Watch this section when adding a new WCF Service!  New behaviors will be added; just delete them and use "ServiceBehavior" -->
        </serviceBehaviors>
    </behaviors>
    <services>
        <service behaviorConfiguration="ServiceBehavior" name="A.LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding"
                contract="A.LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService" />
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        </service>
        <!--<service name="A.LIMS.UI.Web.WCFServices.Accessioning.IQuickDataEntryService"
                 behaviorConfiguration="ServiceBehavior">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior"
                      binding="webHttpBinding"
                      contract="A.LIMS.UI.Web.WCFServices.Accessioning.IQuickDataEntryService" />
        </service>-->
        <!-- Watch this section when adding a new WCF Service!  Duplicate the "QuickDataEntryService" above for an example, but change the fully qualified name -->
    </services>
</system.serviceModel>

【问题讨论】:

  • 你能给我们看看 *.svc 文件吗?它是否托管在 IIS 虚拟目录中?您可以在 Visual Studio 中右键单击并执行“在浏览器中显示”吗?

标签: wcf forms authentication anonymous


【解决方案1】:

我不知道是什么导致了上述异常,但这是最终判决。 WCF 和使用 SSL 证书(HTTPS 协议)需要做很多事情。请原谅格式。我不喜欢 Stack Overflow 有时将代码放入一个块中,有时却没有。

HTTPS 上的 web.config 需要以下内容:

以下是一些需要“requireSSL”属性的地方:

认证>

注意下面“httsGetEnabled”中的“s”:

行为> 行为> 服务行为> 行为>

绑定(在非 SSL web.config 中缺失):



安全>
绑定>
绑定>

服务(注意“mexHttpsBinding”中的“s”):

    <services>
        <service behaviorConfiguration="ServiceBehavior" name="A.LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" contract="A.LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService" />
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
        </service>

    </services>

最后但并非最不重要。我没有使用 .NET 4.0,但我确实在另一台机器上尝试过 .NET。使用 .NET 4.0,如果没有将其配置为正在使用的实际 URL,我无法让 WCF 服务工作。如果同一个 IP 有两个域,则 WCF 仅使用 web.config 中 system.ServiceModel XML 块内此块中的域。我没有在 .NET 4.0 中测试 https,所以我假设 URL 上的协议是下面的 https:

哦,我还必须在 Windows Server 2008 机器上打开 WCF。它需要重新启动服务器!

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多