Эта служба без проблем работала без SSL, но не работает при использовании SSL. Я предполагаю, что это ошибка конфигурации и выложу соответствующие файлы конфигурации
Что я имею в виду под неудачей? Я получаю следующее не очень полезное сообщение от IIS:
The requested service, 'https://.../IssueTrackerService.svc' could not be activated.
See the server's diagnostic trace logs for more information.
И это сообщение из журналов трассировки:
Failed to open Ninject.Extensions.Wcf.NinjectServiceHost
Faulted Ninject.Extensions.Wcf.NinjectServiceHost
ServiceHost faulted.
Абсолютно НИЧЕГО не изменилось с любым исходным кодом здесь. ЕДИНСТВЕННОЕ отличие состоит в том, что я пытаюсь настроить это для работы по SSL. Таким образом, были изменены только файлы web.configs.
Хост web.config:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="NGIT_ConnectionString"
connectionString="..." />
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WsSecured">
<security mode="Transport">
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="...IssueTrackerService"
behaviorConfiguration="mexEnabled">
<endpoint name="IIssueTrackerService"
address=""
binding="wsHttpBinding"
bindingConfiguration="WsSecured"
contract="....IIssueTrackerService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="mexEnabled">
<serviceMetadata httpsGetEnabled="true"
httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="myUserTraceSource"
switchValue="Information, ActivityTracing">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="Error.svclog" />
</sharedListeners>
</system.diagnostics>
<system.webServer>
<directoryBrowse enabled="false" />
</system.webServer>
</configuration>
Клиент web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WsSecured">
<security mode="Transport">
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint name="IIssueTrackerService"
address="https://.../IssueTrackerService.svc"
binding="wsHttpBinding"
bindingConfiguration="WsSecured"
contract="....IIssueTrackerService" />
</client>
</system.serviceModel>
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
</configuration>
Для справки, я включаю файлы в хост-приложение службы:
IssueTracker.svc
<%@
ServiceHost
Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory"
Service="....IssueTrackerService"
%>
Global.asax
using Ninject;
using Ninject.Extensions.Wcf;
namespace ....NGITWcf.Host
{
public class Global : NinjectWcfApplication
{
protected override IKernel CreateKernel()
{
return new StandardKernel(new ServiceModule());
}
}
}
ServiceModule.cs
using Ninject.Modules;
using Ninject.Extensions.Wcf;
using ...;
namespace ....NGITWcf.Host
{
internal class ServiceModule : NinjectModule
{
public override void Load()
{
this.Bind<IUserIssueRepository>()
.To<SqlUserIssueRepository>();
}
}
}