Размещение WCF-фида Atom в IIS - PullRequest
0 голосов
/ 17 марта 2010

У меня есть простой канал Atom 1.0, который я сгенерировал, аналогично примеру, показанному на MSDN .

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

Моя конфигурация следующая:

<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 Ответ

1 голос
/ 17 марта 2010

Вы смешиваете 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 на MSDN , где вы найдете множество очень полезных и информативных дополнительных ресурсов!

...