2010-09-21 2 views
1

Пытаясь следовать этому примеру, чтобы сделать его работу: http://weblogs.asp.net/kiyoshi/archive/2008/10/08/wcf-using-webhttpbinding-for-rest-services.aspxWebHttpBinding в WCF: как правильно настроить его?

Вот мой App.config:

<system.serviceModel> 
    <services>  
     <!-- The service for the TEST WEB client --> 
     <service name="MyServer.AAServiceType" behaviorConfiguration="Default"> 
     <endpoint address="testservice" 
        binding="webHttpBinding" behaviorConfiguration="webBehavior" 
        contract="MyServer.AAIContractName" /> 
     <host> 
      <baseAddresses> 
       <add baseAddress="http://localhost:8787/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <!-- TEST WEB BEHAVIOR --> 
      <behavior name="Default"> 
      <serviceMetadata httpGetEnabled="true"/> 
      </behavior> 
     </serviceBehaviors> 
     <!-- TEST WEB ENDPOINT --> 
     <endpointBehaviors> 
      <behavior name="webBehavior"> 
      <webHttp /> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
</system.serviceModel> 

Update: контракт службы:

namespace MyServer 
{ 
    [ServiceContract(SessionMode=SessionMode.NotAllowed)] 
    public interface IContractName 
    { 
     [WebGet(UriTemplate = "date/{year}/{month}/{day}", ResponseFormat = WebMessageFormat.Xml)] 
     [OperationContract] 
     string GetDate(string day, string month, string year); 
    } 

    public class ServiceType : IContractName 
    { 
     public string GetDate(string day, string month, string year) 
     { 
      return new DateTime(Convert.ToInt32(year), Convert.ToInt32(month), Convert.ToInt32(day)).ToString("dddd, MMMM dd, yyyy"); 
     } 
    } 
} 

Проблема заключается в том, что, когда Я пытаюсь подключиться к порту 8787 (например, с помощью putty) a «Connection failed» ошибка возвращается. Как вы можете видеть, я также пытался помещать неправильные имена в класс контрактов и реализацию сервиса и не получал исключений. Что я делаю неправильно, пожалуйста?

+0

Можете ли вы показать нам ваш контракт на обслуживание? Какой шаблон URL вы указываете? –

+0

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

+0

Хорошо, проблема найдена - предоставлен мой ответ. – BreakPhreak

ответ

1

При запуске службы произошла ошибка. Правильный код:

using (ServiceHost serviceHost = new ServiceHost(typeof(ServiceType))) 
{ 
    try 
    { 
     // Open the ServiceHost to start listening for messages. 
     serviceHost.Open(); 

     // The service can now be accessed. 
     Console.WriteLine("The service is ready."); 
     Console.WriteLine("Press <ENTER> to terminate service."); 
     Console.ReadLine(); 

     // Close the ServiceHost. 
     serviceHost.Close(); 
    } 
    catch (CommunicationException commProblem) 
    { 
     Console.WriteLine(commProblem.Message); 
     Console.ReadLine(); 
    } 
} 
+2

ОК, поэтому с этим работает URL 'http: // localhost: 8787/testservice/date/2010/08/31' ?? –

+0

наконец-то, да :) – BreakPhreak

1

Вы принимаете ли в IIS или самостоятельно принимаете ли вы?

Если вы размещаете это в IIS (с помощью * SVC-файл), то IIS диктует адрес - это будет

http://yourserver/yourvirtualdirectory/yourservice.svc/......... 

Если вы самостоятельно хозяин, то все кажется хорошо для меня - в этом случае ваш базовый адрес вступает в игру:

http://localhost:8787/testservice 

должно быть вашим служебным адресом.

+0

Я сам хостинг. Попробовали оба: подключиться к точно тому же адресу, который вы предложили, и подключиться только к порту 8787 с помощью «шпатлевки». Сбой в любом случае. – BreakPhreak

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