Я не уверен, что вы можете использовать params
в служебном вызове WCF .... в любом случае кажется ненужным ....
Не могли бы вы попробовать эти два договора на обслуживание вместо того, чтобы посмотреть, сработают ли они:
[ServiceContract(Namespace="learning.wcf.MiniCalc")]
public interface IService2
{
[OperationContract]
int Add(int op1, int op2);
}
и
[ServiceContract(Namespace="learning.wcf.MiniCalc")]
public interface IService3
{
[OperationContract]
int Add(List<int> operands);
}
Мне просто интересно, может ли удаление params
из вашего контракта на обслуживание заставить его работать - на первый взгляд все выглядит хорошо ...
ОК, значит, это была не первая попытка ......
Что ж, вполне очевидно: вы используете блок using
для создания экземпляра хоста службы:
using(ServiceHost host = new ServiceHost(typeof(MiniCalcService.Service), new Uri("http://localhost:8091/MiniCalcService")))
{
host.AddServiceEndpoint(typeof(MiniCalcService.IService),new BasicHttpBinding(),"Service");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
host.Open();
Console.WriteLine("Serving MiniCalcService since {0}", DateTime.Now);
Console.Write("Press ENTER key to terminate the MiniCalcHost . . . ");
}
Таким образом, к моменту, когда код достигнет закрывающей скобки }
, экземпляр ServiceHost
будет удален, и, следовательно, узел службы будет закрыт. Больше нет запущенного сервисного хоста!
Вам необходимо остановить выполнение кода где-нибудь после вызова host.Open()
, например,
Console.ReadLine();
или что-то еще.
Итак, ваше первое утверждение о том, что Хост запущен действительно не работает - он работает ненадолго, а затем сразу же завершается .....