我最近构建了一个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>
答案 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。它需要重启服务器!