2012-03-25 2 views
4

Кажется, что в конечной точке службы не обнаружена проблема при попытке получить от моей службы.Оконечная точка обслуживания не найдена?

если я попробую http://localhost:8000/hello/help Я должен ожидать увидеть <string>You entered help <string>, но вместо этого я получаю только конечную точку? Я вообще не трогал мои конфигурационные файлы, и я просто хостинг от консольного приложения.

Ведущий:

namespace Host 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      WebHttpBinding binding = new WebHttpBinding(); 
      WebServiceHost host = 
      new WebServiceHost(typeof(Service1)); 
      host.AddServiceEndpoint(typeof(IService1), 
      binding, 
      "http://localhost:8000/hello"); 
      host.Open(); 
      Console.WriteLine("Hello world service"); 
      Console.WriteLine("Press <RETURN> to end service"); 
      Console.ReadLine(); 
     } 
    } 
} 

Service1:

namespace WcfServiceLibrary1 
{ 
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in both code and config file together. 
    public class Service1 : IService1 
    { 
     public string GetData(string value) 
     { 
      return string.Format("You entered: {0}", value); 
     } 

IService1:

[ServiceContract] 
public interface IService1 
{ 
    [WebGet(UriTemplate = "/{value}")] 
    string GetData(string value); 

ответ

6

Удалите из/{значение} и убедитесь, что он находится в списке OperationContract. Оно должно быть:

[WebGet(UriTemplate = "{value}")] 
[OperationContract] 

Базовый URL придет через с слэш, так что вы действительно ищете http://localhost:8000/hello//help в текущем коде

+0

Hey Justin приятно снова увидеть вас,/{значение}, потому что мой URL-адрес: http: // localhost: 8000/hello no end slash/Я думаю, что это может быть либо или, но независимо от его удаления, не решает проблема. –

+0

@ Garrith Я обновил свой ответ, я заметил, что вам также не хватает OperationContractAttribute. –

+0

lol рабочий договор не хватает! +1 –

0

ножевое в темноте ... по умолчанию, произвольные процессы не разрешено прослушивать сетевые порты.

Когда IIS установлен, учетной записи, которая запускает IIS, предоставляется разрешение - если вы хотите, чтобы другие приложения запускались другими учетными записями (консольными приложениями, службами Windows), чтобы иметь возможность прослушивать порт, вам необходимо предоставить разрешение.

Отметьте команду netsh add urlacl в качестве отправной точки.

+0

Но мой vs2010 работает под управлением? –

+0

Быть администратором не означает, что у вас есть все привилегии - просто у вас есть возможность предоставить их себе. Недавно я работал над службой Windows, которая сама принимала WCF-службу (чтобы разрешить переконфигурировать «на лету») - моя служба была недоступна, пока я не использовал netsh для предоставления разрешения. В то время я использовал VS2010, работающий на Windows Server 2008 R2. – Bevan

Смежные вопросы