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 クライアント構成セクションで、名前が「service」でコントラクトが「IServiceContract」のエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、この名前に一致するエンドポイント要素が client 要素に見つからなかったためである可能性があります。
かなり自明ですが、なぜ「service」という名前の要素を探しているのですか?私の要素は「MyEndpoint」という名前で、メソッドに正しく渡しましたFromConfiguration
か?
web.config を更新して name 属性を「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>
私が付けたエンドポイント名を施設が無視しているように見えますか?
または (より可能性が高い) サービスを正しく登録しておらず、施設が名前付けのフォールバックを使用しています。
編集
私のエンドポイント名属性は「サービス」でなければならないようです! 私が試したすべてのテストで、属性が他の値の場合、常に同じエラーが発生します - これはバグですか?
乾杯