【发布时间】:2009-12-02 23:54:07
【问题描述】:
我正在使用一个使用 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() { }
}
以及 web 项目中的 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).
我认为我缺少一些清晰架构的配置,因为当我不在 .svc 文件中使用 Factory="SharpArch.Wcf.NHibernate.ServiceHostFactory, SharpArch.Wcf" 时,我没有得到异常,但我无法向数据库写入任何内容(我得到一个 ISession 未配置异常)。
我尝试遵循 Northwind 示例,但它不起作用,我会遗漏什么?
【问题讨论】:
-
对不起,我已经标记了有用的答案。
标签: wcf nhibernate exception s#arp-architecture