Ситуация: сайт размещен у хостера; сервис протестирован на 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 - это аутентификации, при которой имя пользователя и пароль передаются серверу в открытом виде.
Показаны сообщения с ярлыком Services. Показать все сообщения
Показаны сообщения с ярлыком Services. Показать все сообщения
Подключение сервиса к работающему сайту
Предположим, что есть 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) в проект добавить следующий код:
4) Shift+F6 - в результате проект будет откомпилирован и в папке \Debug\bin появится файл Service.dll
Чтобы подключить сервис к сайту надо:
1) в папке с сайтом создать текстовый файл DataProvider.svc со следующим кодом:
2) файл Service.dll скопировать в папку \bin 3) в файл default.aspx в тег body добавить:
4) обновить открытое окно IE; в результате на странице появится ссылка Now; переход по этой ссылке приводит к вызову метода GetTicks и в IE отобразится, например:
Примечание: если сервис был откомпилирован в режиме (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-файл будет открыт.
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 |
using System |
namespace Providers |
{ |
[ServiceContract] |
public class DataProvider |
{ |
[OperationContract] |
[WebGet( |
public long GetTicks( |
{ |
return DateTime |
} |
} |
} |
Чтобы подключить сервис к сайту надо:
1) в папке с сайтом создать текстовый файл DataProvider.svc со следующим кодом:
<%@ ServiceHost |
| Service= |
<a href= |
<long xmlns= |
Примечание: если сервис был откомпилирован в режиме (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 сервиса с веб-страницы
Например, REST-служба доступна по адресу http://localhost:1799/Test2.svc и в ней определен WebGet-метод GetData, который принимает какое-то значение.
Чтобы вызвать GetData c web-страницы пишем следующее:
...
Очевидно, что работать с REST намного проще, чем с SOAP.
Чтобы вызвать 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.