3

呼び出し元を偽装する、IIS によってホストされる WCF サービスを実装しています。Web.config ファイルにサービス エンドポイントの構成がある場合、すべてが意図したとおりに機能します。

プログラムでサービス エンドポイントを設定したいのですが、呼び出し元が偽装されていないため、何かが欠けています (エンドポイントはその小さな詳細を除いて正常に動作します)。コードで web.config から作成されたサービス エンドポイントをキャプチャして、デバッグ時にこのエンドポイントとプログラムで作成したエンドポイントの違いを見つける方法はありますか?

ありがとう、

キリスト教徒

4

1 に答える 1

1

既定のサービス ホスト ファクトリを使用して、コード内の web.config からエンドポイントにアクセスできます (場合によっては、デバッガーを IIS プロセスにアタッチして、その内容を確認します)。

    public class MyServiceHostFactory : ServiceHostFactory
    {
        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {
            return new MyServiceHost(serviceType, baseAddresses);
        }
    }

    public class MyServiceHost : ServiceHost
    {
        public MyServiceHost(Type serviceType, Uri[] baseAddresses)
            : base(serviceType, baseAddresses)
        {
        }

        protected override void OnOpening()
        {
            // At this point you have access to the endpoint descriptions
            foreach (var endpoint in this.Description.Endpoints)
            {
                Console.WriteLine("Endpoint at {0}", endpoint.Address.Uri);
                Binding binding = endpoint.Binding;
                BindingElementCollection elements = binding.CreateBindingElements();
                foreach (var element in elements)
                {
                    Console.WriteLine("  {0}", element);
                }
            }

            base.OnOpening();
        }
    }

そして、.svc ファイルで、Factory="YourNamespace.MyServiceHostFactory"属性を指定します。

于 2012-10-25T05:51:39.240 に答える