0

仍在使用 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>

似乎该设施忽略了我给它的端点名称?

或者(更有可能)我没有正确注册我的服务并且该设施正在使用一些命名后备。

编辑

看来我的端点名称属性必须是“服务”!在我尝试过的每个测试中,如果属性是任何其他值,我总是会得到相同的错误 - 这是一个错误吗?

干杯

4

1 回答 1

0

好的 - 我已经设法解决了这个问题。

我编写了一个 MVC 和一个 WCF 的简单测试工具,并毫无问题地使用了 WcfFacility - 这让我相信它确实有效;o)。

我正在使用现有的代码库并重构以使用 WcfFacility,因此我将原始更改合并并重新开始。这一次,我没有任何问题。

我怀疑我一定错过了<system.serviceModel>元素中 web.config 中的一些重复项——尽管我发誓没关系!

干杯

于 2013-03-08T08:22:18.100 回答