У меня проблема с использованием сервиса RESTful WCF 4.0. Я пытаюсь создать службу отдыха, которая в случае ошибки вернет XML-документ с описанием проблемы.
пример:
<ErrorHandler>
<cause>Resource not available</cause>
<errorCode>111103</errorCode>
</ErrorHandler>
Для этого я создал REST-сервис по умолчанию, используя шаблон, предоставленный Visual Studio.
Вот мой класс обслуживания:
public class Service1
{
// TODO: Implement the collection resource that will contain the SampleItem instances
[WebGet(UriTemplate = "")]
public List<SampleItem> GetCollection()
{
// TODO: Replace the current implementation to return a collection of SampleItem instances\
// throw new WebException("lala");
throw new WebFaultException<ErrorHandler>(new ErrorHandler { cause = "Resource not available", errorCode = 100 }, System.Net.HttpStatusCode.NotFound);
//return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
}
[WebInvoke(UriTemplate = "", Method = "POST")]
public SampleItem Create(SampleItem instance)
{
// TODO: Add the new instance of SampleItem to the collection
return new SampleItem() { Id = 3, StringValue = "59" };
}
[WebGet(UriTemplate = "{id}")]
public SampleItem Get(string id)
{
// TODO: Return the instance of SampleItem with the given id
throw new NotImplementedException();
}
[WebInvoke(UriTemplate = "{id}", Method = "PUT")]
public SampleItem Update(string id, SampleItem instance)
{
// TODO: Update the given instance of SampleItem in the collection
throw new NotImplementedException();
}
[WebInvoke(UriTemplate = "{id}", Method = "DELETE")]
public void Delete(string id)
{
// TODO: Remove the instance of SampleItem with the given id from the collection
throw new NotImplementedException();
}
}
}
Как видно из приведенного выше кода, я выкидываю исключение WebFaultException в методе GetCollection. это должно поместить в теле ответа объект «ErrorHandler».
Вот как выглядит мой класс ErrorHandler:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization;
namespace WcfRestService1
{
[DataContract]
public class ErrorHandler
{
[DataMember]
public int errorCode { get; set; }
[DataMember]
public string cause { get; set; }
}
}
Сумасшедшая вещь в том, что она работает, но не работает :)). Я пытаюсь сказать, что Visual Studio выдает ошибку, говоря, что WebFaultException не перехватывается кодом пользователя: | и это приостанавливает мое приложение. Если я нажимаю продолжить, все работает как надо.
Вот несколько фотографий, описывающих мою проблему:
Первый шаг в скрипаче:
Первый шаг
Следующая ошибка Visual Studio: Ошибка Visual Studio
Наконец, после нажатия продолжить все работает:
Это не имеет смысла для меня, и я понятия не имею, почему это происходит и как это исправить: P. Я искал в интернете несколько дней, пытаясь найти решение без удачи. Я использую Visual Studio 2010 Ultimate
С наилучшими пожеланиями:)