Показаны сообщения с ярлыком Services. Показать все сообщения
Показаны сообщения с ярлыком Services. Показать все сообщения

Возможная проблема с хостингом сервисов

суббота, 25 апреля 2009 г.,

Ситуация: сайт размещен у хостера; сервис протестирован на ASP.NET Development Server'е; подключаем сервис к сайту и ... получаем сообщение об ошибке: "Server Error. An unhandled exception occurred during the execution of the current web request.
IIS specified authentication schemes 'IntegratedWindowsAuthentication, Basic, Anonymous', but the binding only supports specification of exactly one authentication scheme. Valid authentication schemes are Digest, Negotiate, NTLM, Basic, or Anonymous. Change the IIS settings so that only a single authentication scheme is used".
Проблема в том, что доступ к настройкам IIS ограничен.
Пытался найти workaround ... в итоге обратился к своему провайдеру - ORCSWEB, они среагировали практически сразу, несмотря на выходной прислали письмо, цитирую: "Please let me know if you would prefer Basic Authentication over Windows authentication and I will be happy to assist you".

Примечание: Basic Authentication - это аутентификации, при которой имя пользователя и пароль передаются серверу в открытом виде.

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

пятница, 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-файл будет открыт.

Вызов REST сервиса с веб-страницы

среда, 11 марта 2009 г.,

Например, REST-служба доступна по адресу http://localhost:1799/Test2.svc и в ней определен WebGet-метод GetData, который принимает какое-то значение.
Чтобы вызвать GetData c web-страницы пишем следующее:


1
<button onclick="alert(GetREST('http://localhost:1799/Test2.svc/GetData/2'))">REST</button>

...


1
<script language="jscript">

2
function GetREST(uri)

3
{

4
var x = new XMLHttpRequest();

5
x.open("GET", uri, false, null, null);

6
x.send();

7
return x.responseText;

8
}

9
</script>


Очевидно, что работать с REST намного проще, чем с SOAP.