locked
Exchange Web Service authentification RRS feed

  • Вопрос

  • Пытаюсь получить данные с Exchange Web Service, добавил его в проект как сервис, менять ничего в сервисе не могу, прослойки в виде другого сервиса иметь так же не имею права. Я пытаюсь делать так:

    public MainPage()
            {
                InitializeComponent();
    
                var uri = ServiceUri;
                var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport)
                    {
                        MaxReceivedMessageSize = 50000000,
                        EnableHttpCookieContainer = true
                    };
                var endpoint = new EndpointAddress(uri);
                
                var ews = new ExchangeServicePortTypeClient(binding, endpoint);
                if (ews.ClientCredentials != null)
                {
                    ews.ClientCredentials.UserName.UserName = UserName;
                    ews.ClientCredentials.UserName.Password = Password;
                }
                else
                {
                    throw (new Exception("No data could be obtained from the service"));
                }
    
                ews.ChannelFactory.Credentials.UserName.UserName = ews.ClientCredentials.UserName.UserName;
                ews.ChannelFactory.Credentials.UserName.Password = ews.ClientCredentials.UserName.Password;
                ews.ChannelFactory.Endpoint.Binding = binding;
                ews.ChannelFactory.Endpoint.Address = endpoint;
                
                var resolveNamesType = new ResolveNamesType
                {
                    ReturnFullContactData = true,
                    UnresolvedEntry = "aleksey"
                };
                ews.ResolveNamesAsync(resolveNamesType);
    
                ews.ResolveNamesCompleted += ews_ResolveNamesCompleted;;DataContext = App.ViewModel;
            }
    static void ews_ResolveNamesCompleted(object sender, ResolveNamesCompletedEventArgs e)
            {
                ResolveNamesResponseType = sender as ResolveNamesResponseType;
            }

    это кончается ошибкой:

    {System.ServiceModel.ProtocolException: The remote server returned an unexpected response: (401) Unauthorized. In Silverlight, a 404 response code may be reported even when the service sends a different error code. ---> System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound.
       at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
       at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClasse.<EndGetResponse>b__d(Object sendState)
       at System.Net.Browser.AsyncHelper.<>c__DisplayClass1.<BeginOnUI>b__0(Object sendState)
       --- End of inner exception stack trace ---
       at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
       at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
       at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
       --- End of inner exception stack trace ---
       at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
       at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
       at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
       at PivotApp2.WebExchageServiceReference.ExchangeServicePortTypeClient.ExchangeServicePortTypeClientChannel.EndResolveNames(IAsyncResult result)
       at PivotApp2.WebExchageServiceReference.ExchangeServicePortTypeClient.PivotApp2.WebExchageServiceReference.ExchangeServicePortType.EndResolveNames(IAsyncResult result)
       at PivotApp2.WebExchageServiceReference.ExchangeServicePortTypeClient.EndResolveNames(IAsyncResult result)
       at PivotApp2.WebExchageServiceReference.ExchangeServicePortTypeClient.OnEndResolveNames(IAsyncResult result)
       at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)}

    Inner Exception:

    {System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound.
       at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
       at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClasse.<EndGetResponse>b__d(Object sendState)
       at System.Net.Browser.AsyncHelper.<>c__DisplayClass1.<BeginOnUI>b__0(Object sendState)
       --- End of inner exception stack trace ---
       at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
       at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
       at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)}

    StackTrace:

       at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
       at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
       at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)

    P.S.: приложение wp8. На сервисе работает SSL. Пароль, имя, домен, адрес сервера, указываю правильно, проверял не раз, нормально с этими данными проходит в веб форме.

    Кто нибудь вабще пытался работать с Exchange с wp8? Active Directory использовать не можно. EWS API добавить в проект не можно.


    С уважением, Герасимов Алексей. Skype: gerich1988; icq: 352-885-953

    15 февраля 2013 г. 14:45

Все ответы

  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]

    20 февраля 2013 г. 6:52
  • после нескольких дней тыканья, была нагуглена информация, что у эмулятора проблемы с ssl, может кто нибудь подтвердить это?

    С уважением, Герасимов Алексей. Skype: gerich1988; icq: 352-885-953

    20 февраля 2013 г. 7:11
  • Привет, точно была такая проблема в эмуляторе windows phone 7 и решалась она ручной установкой сертифика в эмулятор, также в той проблеме разработчик сразу получал 404 ошибку, а у вас 401.

    Можно попробовать проверить проблема это в эмуляторе или нет - создайте консольное или оконное обычное приложение и проверьте ваш код взаимодействия с Exchange.


    Для связи [mail]

    20 февраля 2013 г. 7:44
  • The remote server returned an unexpected response: (401) Unauthorized. In Silverlight, a 404 

    Тут обе эти ошибки :) Консольное приложение отрабатывает хорошо

    А можно поточнее, инструкцию какую то как установить сертификат в эмулятор?



    С уважением, Герасимов Алексей. Skype: gerich1988; icq: 352-885-953


    20 февраля 2013 г. 8:08
  • Выложить файл сертификата .cer на какой-нибудь хостинг с прямым доступом к файлу, а потом в эмуляторе в браузере открыть этот файл. Эмулятор должен предложить установить сертификат.

    Также можно воспользоваться утилитой WP7CertInstaller 1.0.0.0

    Еще может быть полезной статья про самоподписанные сертификаты - WP7 and Self-Signed SSL Certificates


    Для связи [mail]

    20 февраля 2013 г. 8:32
  • беда, сертификат поставился, но ошибка прежняя


    С уважением, Герасимов Алексей. Skype: gerich1988; icq: 352-885-953

    20 февраля 2013 г. 10:07
  • Если есть возможность проверьте код на обычном консольном приложении.

    Для связи [mail]

    22 февраля 2013 г. 10:30
  •  Консольное приложение отрабатывает хорошо

    С уважением, Герасимов Алексей. Skype: gerich1988; icq: 352-885-953

    22 февраля 2013 г. 10:31
  • var req = new WebClient(); req.AllowReadStreamBuffering = true; var bc = Encoding.UTF8.GetBytes(string.Format(@"{0}\{1}:{2}", "inyar", UserName, PasswordLocal)); req.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(bc); req.Headers[HttpRequestHeader.Accept] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; req.Headers[HttpRequestHeader.AcceptCharset] = "windows-1251,utf-8;q=0.7,*;q=0.3"; req.Headers[HttpRequestHeader.AcceptEncoding] = "gzip,deflate,sdch"; req.Headers[HttpRequestHeader.AcceptLanguage] = "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"; req.Headers[HttpRequestHeader.Connection] = "keep-alive"; req.Headers[HttpRequestHeader.Host] = "169.254.80.80:443"; req.Headers[HttpRequestHeader.IfModifiedSince] = "Fri, 22 Feb 2013 08:30:43 GMT"; req.Headers[HttpRequestHeader.IfNoneMatch] = "2e7483e7d610ce1:0"; req.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"; req.DownloadStringCompleted += (s, e) => { if (e.Error == null) {

    if (!string.IsNullOrEmpty(e.Result)) { var sss = e.Result; } } }; req.DownloadStringAsync(LocalBasicServiceUri);

    это отлично работает без ssl, мне остаётся непонятным что нужно изменить

    С уважением, Герасимов Алексей. Skype: gerich1988; icq: 352-885-953

    25 февраля 2013 г. 10:19