Ошибка 401 в файле jsdebug при изменении службы WCF для использования интерфейса - PullRequest
0 голосов
/ 24 марта 2011

Сценарий. Я добавляю «службу WCF с поддержкой AJAX» в мое приложение ASP.NET (веб-формы). Это приводит к следующему (длинные пространства имен усекаются):

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService
{
    // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
    // To create an operation that returns XML,
    //     add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
    //     and include the following line in the operation body:
    //         WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
    [OperationContract]
    public void DoWork()
    {
        // Add your operation implementation here
        return;
    }

    // Add more operations here and mark them with [OperationContract]
}

я меняю [ServiceContract (Namespace = "")] в [ServiceContract (Namespace = "http://domain.com/services")]

На мою страницу добавляю:

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
    <Services>
        <asp:ServiceReference path="~/Services/MyService.svc" />
    </Services>
</asp:ScriptManagerProxy>

Я также добавил функцию javascript, чтобы я мог вызвать службу:

вызов функции DoWork () { domain.com.services.MyService.DoWork (); }

Сайт работает с аутентификацией Windows. Когда я запускаю страницу, файл jsdebug генерируется, обнаруживается и domain.com.services.MyService.DoWork (); работает без проблем. Это подтверждается FireBug. Поэтому мой следующий шаг - создать интерфейс и реализовать его в классе обслуживания. Так что теперь у меня есть:

[ServiceContract(Namespace = "http://domain.com/services")]
public interface IMyService
{
    [OperationContract]
    void DoWork();
}

и

[AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] публичный класс MyService: IMyService { public void DoWork () { // Добавить реализацию вашей операции здесь вернуть; } }

и измените web.config, указав контракт = "Namespace.IMyService"

Теперь я получаю ошибку 401 в файле jsdebug. Кто-нибудь когда-нибудь видел это?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 25 марта 2011

Это была красная сельдь. По какой-то причине наличие конечной точки mex в службе также вызвало это. Я снимаю конечную точку mex, и 401 уходит. Не то чтобы это было решением, но, по крайней мере, я обошёл свою ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...