2010-03-17 1 views
0

У меня есть простой Atom 1.0, который я сгенерировал, подобно the example shown on MSDN.Хостинг фида Atom WCF в IIS

Однако вместо создания хоста и тестирования фида через консольное приложение, как в примере, я пытаюсь создать конечную точку через конфигурацию.

Моя конфигурация выглядит следующим образом:

<system.serviceModel> 
     <services> 
      <service 
       name="MyNamespace.MyService" 
       behaviorConfiguration="returnFaults"> 
       <endpoint 
        address="" 
        binding="basicHttpBinding" 
        contract="MyNamespace.IMyGenericService"> 
       </endpoint> 
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
      </service> 
     </services> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="returnFaults"> 
        <serviceMetadata httpGetEnabled="true"/> 
        <serviceDebug includeExceptionDetailInFaults="true"/> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
    </system.serviceModel> 

Когда я запускаю моей службы WCF, я могу получить доступ к странице описания акции и даже использовать этот адрес в качестве ссылки на службу. Однако, если я попытаюсь вызвать метод, который возвращает фид (http://localhost:SomeVSPort/MyService/GetFeed), я получаю пустую страницу без ошибок. Установка точки останова в методе была неудачной, поскольку метод, похоже, не вызван.

Мой вопрос: как я могу разоблачить этот канал для хостинга через IIS? Должен ли я использовать другую конфигурацию для моей конечной точки?

Для справки, мое заявление службы следующим образом:

namespace MyNamespace 
{ 
    [ServiceContract] 
    public interface IMyGenericService 
    { 
     [OperationContract] 
     [WebGet] 
     Atom10FeedFormatter GetFeed(); 
    } 

    public class MyService: IMyGenericService 
    { 
     public Atom10FeedFormatter GetFeed() 
     { 
      SyndicationFeed feed = new SyndicationFeed(); 

     //SimpleEntry is a local class that holds location information in a GeoRSS Simple format. 
      IList<SimpleEntry> entries = new List<SimpleEntry>() 
      { 
       new SimpleEntry() { ID = "1", Point = "45.256 -71.92", Title = "Point 1" }, 
       new SimpleEntry() { ID = "2", Point = "-71.92 45.256", Title = "Point 2" } 
      }; 

      feed.Items = entries 
       .Select(e => new SyndicationItem() 
       { 
        Content = new XmlSyndicationContent(
         "application/xml", 
         new SyndicationElementExtension(e)), 
        Title = new TextSyndicationContent(e.Title), 
        Id = e.ID 
       }); 

      return new Atom10FeedFormatter(feed); 
     } 
    } 
} 

ответ

1

Вы путаете SOAP (через basicHttpBinding в вашей конфигурации) и REST (с использованием AtomFeedFormatter, и атрибут вашего контракта операции [WebGet]).

Вам нужно выбрать тот или иной. Так как вы хотите Atom, я предполагаю, что вы действительно хотите webHttpBinding в вашей конфигурации:

<system.serviceModel> 
    <services> 
     <service 
      name="MyNamespace.MyService" 
      behaviorConfiguration="returnFaults"> 
      <endpoint 
       address="" 
       behaviorConfiguration="RESTBehavior" 
       binding="webHttpBinding" 
       contract="MyNamespace.IMyGenericService"> 
      </endpoint> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="RESTBehavior"> 
       <webHttp/> 
      </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
      <behavior name="returnFaults"> 
       <serviceDebug includeExceptionDetailInFaults="true"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

Поскольку REST не имеет такие вещи, как WSDL и так далее, вы можете избавиться от любых связанных с MEX вещи, тоже - просто REST ,

Отъезд WCF REST Developer Center on MSDN для получения множества полезных и дополнительных дополнительных ресурсов!