仍在使用 Castle.Windsor 和 WcfFacility 找到我的方式,但这些让我摸不着头脑。我希望 Windsor 将 WCF 客户端注入它在我的存储库中看到该依赖项的位置。
我在 Visual Studio 中添加了一个服务引用,并将以下内容添加到我的引导代码中:
container.AddFacility<WcfFacility>();
container.Register(
Component.For<IServiceContract>()
.AsWcfClient(
DefaultClientModel.On(
WcfEndpoint.FromConfiguration("MyEndpoint")
)
)
);
我的 web.config 包含一个<client>
带有相应名称的端点的部分:
<client>
<endpoint address="http://localhost:63988/MyService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IServiceContract"
contract="IServiceContract"
name="MyEndpoint" />
</client>
当我运行我的应用程序时,我得到一个 YSOD:
在 ServiceModel 客户端配置部分中找不到名称为“服务”和合同“IServiceContract”的端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此名称匹配的端点元素。
非常不言自明,但为什么要寻找一个名为“ service ”的元素,我的元素名为“ MyEndpoint ”,我已正确传递给该FromConfiguration
方法?
如果我更新我的 web.config 以将名称属性从“MyEndpoint”更改为“service” - YSOD 消失了,我的页面可以正常工作了!
<client>
<!-- Changing the name attribute to "service" works? -->
<endpoint address="http://localhost:63988/MyService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IServiceContract"
contract="IServiceContract"
name="service" />
</client>
似乎该设施忽略了我给它的端点名称?
或者(更有可能)我没有正确注册我的服务并且该设施正在使用一些命名后备。
编辑
看来我的端点名称属性必须是“服务”!在我尝试过的每个测试中,如果属性是任何其他值,我总是会得到相同的错误 - 这是一个错误吗?
干杯