2010-10-04 5 views
1

Я пытаюсь создать пользовательскую службу проверки подлинности ASP.NET Forms с использованием WCF. Я вызываю его через тестовую страницу, содержащую только одну строку JS (за исключением скриптов ScriptManager). Проблема в том, что сервер возвращает код ответа 500, а тело ответа пусто. Мои точки останова в методе службы и в Application_Error в Global.asax не попадают.Пользовательские службы проверки подлинности форм ASP.NET с WCF

Sys.Services.AuthenticationService.login('user', 'pass', false, null, null, null, null, null); 

Я могу увидеть запрос зайти на сервер в браузере инструментов со следующим телом запроса:

{"userName":"user","password":"pass","createPersistentCookie":false} 

Другие вещи на стороне запроса также, кажется, хорошо.

Вот служба конфигурации:

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
     <behavior name="BtxAuthenticationEndpointBehavior"> 
     <webHttp/> 
     </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    </serviceBehaviors> 
    </behaviors> 
    <services> 
    <service name="MyNamespace.BtxAuthenticationService"> 
     <endpoint contract="MyNamespace.IBtxAuthenticationService" binding="webHttpBinding" behaviorConfiguration="BtxAuthenticationEndpointBehavior"/> 
    </service> 
    </services> 
</system.serviceModel> 

И декларация интерфейса:

[ServiceContract] 
public interface IBtxAuthenticationService 
{ 
    [OperationContract] 
    [WebInvoke] 
    bool Login(string username, string password, bool createPersistentCookie); 

    [OperationContract] 
    [WebInvoke] 
    void Logout(); 
} 

Реализация:

public class BtxAuthenticationService : IBtxAuthenticationService 
{ 
    public bool Login(string username, string password, bool createPersistentCookie) 
    { 
     ... irrelevant because this is never hit 
    } 

    public void Logout() 
    { 
    } 
} 

Может кто-нибудь сказать мне, как настроить это или укажите мне способ его отладки. Также будет приветствоваться статья об осуществлении пользовательской проверки подлинности с помощью службы WCF. Я пробовал экспериментировать с другими другими настройками, включая все параметры подробностей исключений, которые я мог найти, но не смог добиться какого-либо прогресса (хотя я смог сделать некоторый регресс и получить разные исключения, такие как отсутствующие конечные точки и т. Д.).

Спасибо за ваше время.

ответ

1

Не уверен, что это помогает. Я никогда не писал такую ​​услугу, но ваша конфигурация создает службу WCF, которая не является готовым ASP.NET AJAX и работает с XML вместо JSON. Попробуйте использовать это вместо поведения webHttp:

<endpointBehaviors> 
    <behavior name="BtxAuthenticationEndpointBehavior"> 
    <enableWebScript /> 
    </behavior> 
</endpointBehaviors> 
+0

Я уже пробовал это. Я попробую еще раз завтра, когда я доберусь до своей рабочей машины, но я считаю, что enableWebScript отвечает за предоставление прокси-сервера JS, который в этом случае не нужен. Возможно, я ошибаюсь, но даже если это проблема, я должен увидеть некоторые более описательные ошибки. – Stilgar

+0

Да, вы правы. EnableWebScript позволяет добавлять службу в качестве ссылки на ScriptManager и предоставляет прокси-сервер JS. Но он также переключает формат сообщений в JSON. Вы также можете сделать это в атрибуте WebInvoke, установив форматы Request and Response. Также попробуйте включить уровень AspNetCompatibility. –

+0

Я попытался установить формат через элемент webHttp (для этого есть атрибут), но это не помогло. – Stilgar