3

うまくいけば、これは簡単です。私はこれが可能かどうか疑問に思います。おそらくそうではありません。私はWCFサービスを自己ホストしようとしています(下の私の例ではコンソールアプリケーションです)。サービスにはデフォルトのコンストラクタがありません。単一のパラメータシグネチャコンストラクタのみを含みます。ユーザーセッションを処理できるようにするには、サービスが必要です。現在、Ninject DIを使用しています。ここで私の問題を説明するために思いついた簡単なコードの解決策です:セルフホスト(IISまたはWASなし)パラメータが必要なサービスを持つWCF

using System; 
using System.ServiceModel; 
using System.ServiceModel.Web; 
using Ninject.Modules; 

namespace ConsoleApplication1 
{ 
    public class Program 
    { 
     static void Main() 
     { 
      using (var webServiceHost = new WebServiceHost(typeof(MyWcf))) 
      { 
       var webHttpBinding = new WebHttpBinding(); 
       var uri = new Uri("http://localhost:8000/"); 
       webServiceHost.AddServiceEndpoint(typeof(IMyWcf), webHttpBinding, uri); 
       webServiceHost.Open(); 
       Console.WriteLine("Service is ready..."); 
       Console.ReadKey(); 
      } 
     } 
    } 

    [ServiceContract] 
    public interface IMyWcf 
    { 
     [OperationContract, WebGet(UriTemplate = "")] 
     string HelloWorld(); 
    } 

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
    public class MyWcf : IMyWcf 
    { 
     private readonly IMessage _customMessage = new Message("Default Message."); 

     public MyWcf(IMessage message) 
     { 
      _customMessage = message; 
     } 

     public string HelloWorld() 
     { 
      return _customMessage.Text; 
     } 
    } 

    public interface IMessage 
    { 
     string Text { get; } 
    } 

    public class Message : IMessage 
    { 
     public Message (string message) 
     { 
      Text = message; 
     } 
     public string Text { get; set; } 
    } 

    public class NinjectSetup : NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<IMessage>().To<Message>() 
       .WithConstructorArgument("message", "Injected String Message."); 
     } 
    } 
} 

明らかに、パラメータ化されたコンストラクタをコメントアウトすると、サービスが実行できます。しかし、それは私には良いことではありません。私はServiceHostFactoryを使いたくないと思うので、明らかに.svc/IISを持っている必要があるからです。これを回避する方法はありますか? WebServiceHostを継承する新しいMyWebServiceHostを作成し、そのサービスのインスタンスを作成するいくつかのメソッドをオーバーライドできますか?

+2

Ninject.Extensions.wcfの例を見ましたか?自己ホストの例がこれをしていることを確かめてください。 –

+0

リンクすることができますか?私が見つけたすべての例では、IISでホストされており、ServiceHostFactoryまたはServiceBehaviorを使用しています。 – ymerej

+0

例題に2つあります。 1つは自己ホストまたはsometthing(Ninject.Extensions.Wcfリポジトリのgithubにあるすべてのobv) –

答えて

1

Rubenの提案(上記のコメント)を使用して、Ninject.Extensions.Wcfソースリポジトリ内で実際のサンプルを見つけることができました。

関連する問題