У меня есть WCF, который используется уже более года, зашифрован кем-то другим, и я пытаюсь его реорганизовать, но способ организации структуры папок и файл svc.cs, содержащий методы, не тот, который я я привык из образцов WCF я завершено .
Вот то, чего я пытаюсь достичь. Поскольку ни одна из настроек не изменилась за последний год, меня попросили жестко закодировать все настройки сервиса в коде. Служба размещена в большом и существующем веб-приложении (и я должен оставить его там), файл svc содержит метод, вызываемый клиентом, и этот файл svc.cs не находится в корне виртуального каталога, но глубже, скажем, <virtualDirectory>/WebServices/PotatoWebService/PotatoWebService.svc
, не вызывает ли его отсутствие в корневом каталоге виртуального каталога?
Поскольку я перемещаю конфигурацию из файла конфигурации, я сейчас создаю службу, хост, конечную точку, привязку в файле global.axax.cs веб-приложения на ApplicationStart()
, и это то место, с которого нужно начать этот сервис в веб-приложении?
Возможно ли переместить все в коде, не только конечную точку, но и весь контент поведения, службы и системы. ServiceModel, найденный в файле web.config, чтобы «очистить» файл конфигурации и остановить поддержка менеджеров и настройка конфигурации с настройками, которые им не нужны?
Если это так, я пытался в течение 2 дней заставить это работать безуспешно. Теперь, согласно netstat, у меня запущена и работает служба, но когда я открываю свой файл svc в браузере, появляется исключение, в котором говорится, что для службы нет определенных конечных точек, хотя согласно nstat у меня запущена служба:
netstat -a | find LISTENING
...
TCP machineName:8097 elamontagne.potato.com:0 LISTENING
...
Итак, у меня запущена служба, но svc-файл не знает об этом и не может использовать его конечные точки, клиент пытается связаться со службой и не может найти его, потому что у службы нет конечной точки, есть какие-либо советы по сужению Советы по устранению неполадок в этой ситуации?
//Address
string hostingAddress = "PotatoVirtualDirectory/PotatoService/PotatoService.svc";
// Binding
BasicHttpBinding PotatoServiceBinding = ConfigurePotatoServiceBinding(serviceSecurityMode);
// Contract
Type PotatoContract = typeof(IPotatoService);
// Host
this.PotatoServiceHost = new ServiceHost(typeof(PotatoService), new Uri("http://localhost:8097"));
// Endpoint
this.PotatoServiceHost.AddServiceEndpoint(PotatoContract, PotatoBinding, hostingAddress);
// Behavior
ConfigurePotatoServiceBehavior(this.PotatoServiceHost, PotatoServiceBinding);
// Name
this.PotatoServiceHost.Description.Name = "PotatoNamespace.PotatoService";
//Start!
this.PotatoServiceHost.Open();
Он компилируется и запускается, он дает мне запущенный сервис в открытом состоянии. Клиент не может найти его в своем обычном месте, и файл SVC жалуется, что у него нет ничего в web.config, и хочет получить конечную точку ServiceHasZeroAppEndpoints: «Служба имеет нулевые конечные точки приложения (не инфраструктуры)»
Я прошел по коду в отладке, и все выглядит нормально, сервис открыт, что мне не хватает, какие-нибудь советы, чтобы сузить эту проблему?
Редактировать : Получение от фабрики хостов службы работало хорошо, спасибо!