2014-09-17 3 views
0

Я только начинаю с C# и немного застрял на этом.Возврат пользовательского сообщения об ошибке в службе WCF http

Мне нужно вернуть пользовательское сообщение об ошибке, когда пользователь не имеет доступа к определенному ресурсу.

класс Интерфейс для службы:

[ServiceContract] 
public interface IPatientDemographics 
{ 
    [OperationContract] 
    [WebInvoke(Method = "GET", UriTemplate = "GetPatientDemographics/{strHospId}/{strView=mobile}", 
    ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] 
    [return: MessageParameter(Name = "PatientDemographicsResultSet")] 
    List<PatientDemographics> GetPatientDemographics(string strHospId, string strView); 

    [OperationContract] 
    [FaultContract(typeof(AccessError))] 
    [return: MessageParameter(Name = "Error")] 
    AccessError ReturnAccessError();   
} 

[DataContract] 
public class AccessError 
{ 
    [DataMember] 
    public bool Error { get; set; } 
    [DataMember] 
    public string Message { get; set; } 
} 

Класс обслуживания:

[ServiceBehavior(AddressFilterMode=AddressFilterMode.Any)] 
public class PatientDemographics : IPatientDemographics 
{ 
    public List<PatientDemographics> GetPatientDemographics(string strHospId, string strView) 
    { 
     AuthenticationDAO authenticationDAO = new AuthenticationDAO(); 
     string userName = GetUserNameFromHeader(); 

     if (authenticationDAO.CheckPatientSealAccess(strHospId, userName, "-1", "N")) 
     { 
      PatientDAO patientDAO = new PatientDAO(); 
      patientDAO.AuditPatient(strHospId, userName); 
      return patientDAO.GetPatientDemographics(strHospId); 
     } 
     else 
     { 
      AccessError serviceData = new AccessError(); 
      serviceData.Error = true; 
      serviceData.Message = "User does not have access to patient record"; 
      throw new FaultException<AccessError>(serviceData, "User does not have access to patient record"); 
     } 
    } 
} 

На данный момент, это просто возвращает пустой объект, если пользователь не имеет доступа. Я пытался бросить исключение FaultException, но не повезло. В идеале я хочу, чтобы вернуться в формате JSON что-то вроде:

{ 
    error: "User does not have access to patient record" 
} 
+0

Это не «веб-сервис .NET»: это WCF. Вы должны уточнить свои вопросы: D –

+0

Не могли бы вы показать код, используемый для исключения исключения? –

+0

Я редактировал код, который я пробовал –

ответ

0

Вы должны использовать канал Диспетчер добавить обработчик ошибок и определить пользовательские придираться контракт.

Существует хорошая статья об обработке ошибок в WCF 3.5. Это длинный способ описать, что вам нужно, поскольку я был наказан за размещение URL. Я бы предложил вам посмотреть в проекте кода для «Обработка ошибок и ошибок в WCF». Хорошая статья, написанная Сашей Гольдштейном. Надеюсь, это поможет.

+0

Вы не будете наказаны за отправку ссылки. Если вы объясните возможный подход/идею, и вы добавите ссылку, поскольку ссылка лучше, чем концептуальная ссылка, подобная той, которая указана в вашем ответе: P –

+0

Я недавно дал подход и добавил URL-адрес, но я потерял 3 балла. – meetkichu

+0

Это печально. Есть много * dowvote * whor * s, но у меня сложилось впечатление, что SO работает, и вам не нужно беспокоиться о downvoters навсегда ... –