Я работаю с приложением, которое использует wcf и точную архитектуру, я пытаюсь создать сервис для записи в базу данных. Вот мой сервис:
[ServiceContract]
public interface IFacilitiesWcfService : ICloseableAndAbortable
{
[OperationContract]
void AddFacility(string facility);
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
class FacilitiesWcfService:IFacilitiesWcfService
{
public FacilitiesWcfService(IRepositoryWithTypedId<Facility,string> facilityRepository)
{
Check.Require(facilityRepository != null, "facilityRepository may not be null");
this.facilityRepository = facilityRepository;
}
private readonly IRepositoryWithTypedId<Facility,string> facilityRepository;
public void AddFacility(string facility)
{
facilityRepository.DbContext.BeginTransaction();
Facility newFacility = new Facility();
newFacility.SetAssignedIdTo(facility);
newFacility.NAME=facility;
newFacility.ADDRESS = facility;
facilityRepository.DbContext.CommitTransaction();
}
public void Abort() { }
public void Close() { }
}
И файл LogisticsWCF.svc в веб-проекте:
<%@ ServiceHost Language="C#" Debug="true" Service="Project.Wcf.FacilitiesWcfService"
Factory="SharpArch.Wcf.NHibernate.ServiceHostFactory, SharpArch.Wcf" %>
Я создал клиента с svcutil.exe http://localhost:1905/LogisticsWCF.svc?wsdl
, а затем создал этот тестовый пример:
[TestFixture]
class WCFLogisticsTests
{
[Test]
public void CanAddFacility()
{
FacilitiesWcfServiceClient facility = new FacilitiesWcfServiceClient();
facility.AddFacility("NEW");
facility.Close();
}
}
Но я получаю это исключение:
TestCase 'Tests.Project.Web.WCFLogisticsTests.CanAddFacility'
failed: System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail] : The needed dependency of type FacilitiesWcfService could not be located with the ServiceLocator. You'll need to register it with the Common Service Locator (CSL) via your IoC's CSL adapter.
Server stack trace:
at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at IFacilitiesWcfService.AddFacility(String facility)
C:\Documents and Settings\epena\My Documents\SVN\Project\tests\Project.Tests\FacilitiesWcfService.cs(58,0): at FacilitiesWcfServiceClient.AddFacility(String facility)
WCFLogisticsTests.cs(18,0): at Tests.Project.Web.WCFLogisticsTests.CanAddFacility()
0 passed, 1 failed, 0 skipped, took 4.52 seconds (NUnit 2.5.2).
Я думаю, что мне не хватает какой-то конфигурации точной архитектуры, потому что, когда я не использую Factory="SharpArch.Wcf.NHibernate.ServiceHostFactory, SharpArch.Wcf"
в файле .svc, я не получаю исключения, но я не могу ничего записать в базу (Я получаю исключение ISession not сконфигурированное).
Я пытался последовать примеру Нортвинда, но он не работает. Чего мне не хватает?