Сценарий. Я добавляю «службу 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. Кто-нибудь когда-нибудь видел это?
Спасибо за вашу помощь.