Подключение сервиса к работающему сайту

пятница, 24 апреля 2009 г.,

Предположим, что есть ASP.NET сайт, созданный в Visual Studio 2008:
1) Ctrl+Shift+N
2) Project Types: Web, Templates: ASP.NET Web Application
3) F5 - в результате откроется IE, в котором отобразится default.aspx

Например, необходимо к работающему сайту подключить сервис с методом GetTicks, который доступен по адресу /DataProvider.svc/Now и возращает значение DateTime.Now.Ticks в xml-формате.

Чтобы создать сервис в Visual Studio надо:
1) создать новый проект Project Types: Windows, Templates: Class Library
2) в References добавить сборки: System.ServiceModel и System.ServiceModel.Web
3) в проект добавить следующий код:
using System;
using System.ServiceModel;
using System.ServiceModel.Web;

namespace Providers
{
    [ServiceContract]
    public class DataProvider
    {
        [OperationContract]
        [WebGet(UriTemplate = "/Now/", ResponseFormat = WebMessageFormat.Xml)]
        public long GetTicks()
        {
            return DateTime.Now.Ticks;
        }
    }
}
4) Shift+F6 - в результате проект будет откомпилирован и в папке \Debug\bin появится файл Service.dll

Чтобы подключить сервис к сайту надо:
1) в папке с сайтом создать текстовый файл DataProvider.svc со следующим кодом:
<%@ ServiceHost

Service="Providers.DataProvider" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
2) файл Service.dll скопировать в папку \bin 3) в файл default.aspx в тег body добавить:
<a href="DataProvider.svc/Now">Now</a>
4) обновить открытое окно IE; в результате на странице появится ссылка Now; переход по этой ссылке приводит к вызову метода GetTicks и в IE отобразится, например:
<long xmlns="http://schemas.microsoft.com/2003/10/Serialization/">633761956465306263</long>

Примечание: если сервис был откомпилирован в режиме (Configuration: Debug), затем подключен к сайту и хоть раз вызван, то в момент повторной компиляции получим сообщение: Unexpected error creating debug information file '....PDB' -- '....pdb: The process cannot access the file because it is being used by another process.'
Решение: в проекте сайта открыть файл web.config и сохранить его; в результате сайт будет перезапущен; доступ к .pdb-файл будет открыт.

Комментариев нет: