Windows Server 2008中无法访问WCF服务

时间:2011-05-11 16:52:11

标签: wcf forms authentication anonymous

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

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

  

System.ServiceModel.ServiceActivationException:   服务   '/WCFServices/Accessioning/QuickDataEntryService.svc'   由于a无法激活   编译期间的异常

到目前为止,这是我的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>

1 个答案:

答案 0 :(得分:0)

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

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

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

&lt; authentication mode =“Forms”&gt;             &lt; forms loginUrl =“Login.aspx”timeout =“30”protection =“All”requireSSL =“true”/&gt;         &LT; /认证&GT;         &lt; httpCookies httpOnlyCookies =“false”requireSSL =“true”domain =“”/&gt;

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

&LT;行为&GT;             &LT; endpointBehaviors&GT;                 &lt; behavior name =“AspNetAjaxBehavior”&gt;                     &lt; enableWebScript /&gt;                &LT; /行为&GT;             &LT; / endpointBehaviors&GT;             &LT; serviceBehaviors&GT;                 &lt; behavior name =“ServiceBehavior”&gt;                     &lt; serviceDebug includeExceptionDetailInFaults =“true”/&gt;                     &lt; serviceMetadata httpsGetEnabled =“true”/&gt;                 &LT; /行为&GT;             &LT; / serviceBehaviors&GT;         &LT; /行为&GT;

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

&LT;绑定&GT;                 &LT;&的WebHttpBinding GT;
                    &lt; binding name =“webBinding”&gt;
                        &lt; security mode =“Transport”&gt;                         &LT; /安全&GT;
                    &LT; /结合&GT;
                &LT; /&的WebHttpBinding GT;     &LT; /绑定&GT;

服务(请注意“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:

&lt; serviceHostingEnvironment aspNetCompatibilityEnabled =“true”&gt;             &LT; baseAddressPrefixFilters&GT;                 &lt; add prefix =“http://subdomain.domain.com/”/&gt;             &LT; / baseAddressPrefixFilters&GT;         &LT; / serviceHostingEnvironment&GT;

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