0

TestServiceとという2つのサービスコントラクトを実装するクラスがIService1ありIService2ます。しかし、私は実装の難しさに直面しています。

私のコードは次のようになります。

Uri baseAddress = new Uri("http://localhost:8000/ServiceModel/Service");
Uri baseAddress1 = new Uri("http://localhost:8080/ServiceModel/Service1");

ServiceHost selfHost = new ServiceHost(typeof(TestService));

selfHost.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), baseAddress);
selfHost.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), baseAddress1);

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);

selfHost.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();

selfHost.Close();

次のような実行時エラーが発生します:

ServiceMetadataBehaviorのHttpGetEnabledプロパティはtrueに設定されており、HttpGetUrlプロパティは相対アドレスですが、httpベースアドレスはありません。httpベースアドレスを指定するか、HttpGetUrlを絶対アドレスに設定します。

私はそれについて何ができますか?本当に2つの別々のエンドポイントが必要ですか?

4

2 に答える 2

2

あなたは2つの方法でそれを修正することができます

1)

Uri baseAddress = new Uri("http://localhost:8000/ServiceModel");
ServiceHost selfHost = new ServiceHost(typeof(TestService), baseAdress);

selfHost.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), "Service");
selfHost.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), "Service1");

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);

2)

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.HttpGetUrl = new Uri("http://localhost:8000/ServiceModel");
selfHost.Description.Behaviors.Add(smb);
于 2010-05-12T08:56:08.167 に答える
1

あなたがする必要があるのはベースアドレスを追加することだけです。まだ2つの別々のエンドポイントがあります。

ServiceHost selfHost = new ServiceHost(typeof(TestService), new Uri ("http://localhost:8080/ServiceModel")); 
于 2010-05-12T08:55:00.460 に答える