Обработка исключений (ошибок) Silverlight из сервиса wcf - PullRequest
1 голос
/ 02 сентября 2010

Я хочу получить код исключения из метода wcf, но всегда получаю ошибку NotFound.

Сторона клиента:

public MainPage()
    {
        InitializeComponent();
        client.TestCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(TestCompleted);
    }

    void TestCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
        if(e.Error!=null)
        {
            //HOW to get here my class BaseFault???
        }
    }

Сторона сервера:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [FaultContract(typeof(BaseFault))]
    void Test(int id);
}

  public void Test(int id)
  {
            try
            {
                if (id == -1)
                    ThrowEx(new BaseFault() { ErrorCode = ProcessErrorsCode.InvalidArgument });
                else
                    throw new NullReferenceException("some server error with null value");
            }
            catch
            {
                ThrowEx(new BaseFault() { ErrorCode = ProcessErrorsCode.InternalServerError });
            }
   }


 public void ThrowEx(BaseFault fault)
 {
    throw new FaultException<BaseFault>(fault);
 }



    [DataContract]
    public class BaseFault
    {
        [DataMember]
        public ProcessErrorsCode ErrorCode { get; set; }
    }

Config (includeExceptionDetailInFaults установлено в True):

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>

    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="">

                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="True" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
</configuration>

Мне нужно получить тип BaseFault на стороне клиента.Как это сделать?

Ответы [ 4 ]

1 голос
/ 10 декабря 2013

Добавьте следующее в обработчик событий Application_Startup вашего приложения Sliverlight:

    bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
1 голос
/ 07 сентября 2010

Евгений,

Проблема здесь в том, что вы получаете ошибку 404. Это на уровне выше службы WCF и обрабатывается и возвращается IIS, поэтому ваш запрос никогда не попадает в вашу службу WCF.Вам нужно проверить URL конечной точки вашей службы и тот же в вашем файле .svc / IIS и убедиться, что они совпадают.На самом деле я попытался бы перейти к URL-адресу конечной точки с помощью браузера и посмотреть, что я получу.

Как объясняет ваша ссылка, вам нужно иметь код, который можно привести к ошибке, и я предполагаю, что вы уже это делаете.

Надеюсь, это поможет.

1 голос
/ 07 сентября 2010

Нашел для меня простое решение:

        bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);

просто добавьте эту строку кода, и она работает без конфигурации.

1 голос
/ 06 сентября 2010

Евгений, как вы создали свой клиентский прокси? У вашего клиента есть доступ к типу BaseFault? Какую ошибку вы получаете (тип не найден, страница не найдена, файл не найден)?

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