Windows Phone 7 Подключение к SharePoint через SOAP - PullRequest
0 голосов
/ 21 марта 2010

Я делаю второе приложение для платформы Windows 7 Phone Series и не могу подключиться к серверу SharePoint по протоколу https.

99% из приведенного ниже не мой код.Я позаимствовал его у http://blog.daisley -harrison.com / blog / post / Practical-Silverlight-and-SharePoint-Integration-Part-Two.aspx , пока не пойму, как работает SOAP в серии W7P.

Я знаю, что мне нужен какой-то способ отправки учетных данных, но Win 7 API, похоже, не позволяет вам. ServiceReferences.ClientConfig

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="ViewsSoap" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" transferMode="Buffered">
                    <security mode="TransportCredentialOnly"/>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://my.secureconnection.com/_vti_bin/views.asmx"
                binding="basicHttpBinding" bindingConfiguration="ViewsSoap"
                contract="SharePointListService.ViewsSoap" name="ViewsSoap"  />
        </client>
    </system.serviceModel>
</configuration>

Это моя основная кодовая страница:

    public partial class MainPage : PhoneApplicationPage
    {
        public MainPage()
        {
            InitializeComponent();

            SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
            try
            {
                Uri serviceUri = new Uri("https://my.secureconnection.com" + SERVICE_LISTS_URL);
                BasicHttpBinding binding;
                if (serviceUri.Scheme == "https")
                {
                    binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
                }
                else
                {
                    binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
                }
                EndpointAddress endpoint = new EndpointAddress(serviceUri);
                ListsSoapClient listSoapClient = new ListsSoapClient(binding, endpoint);


                NetworkCredential creds = new NetworkCredential("administrator", "iSynergy1", "server001");
                //listSoapClient.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Identification;
                //listSoapClient.ClientCredentials.Windows.ClientCredential = creds;

                listSoapClient.GetListCollectionCompleted += new EventHandler<GetListCollectionCompletedEventArgs>(listSoapClient_GetListCollectionCompleted);
                listSoapClient.GetListCollectionAsync();
            }
            catch (Exception exception)
            {
                handleException("Failed to get list collection", exception);
            }
        }
        #region ShowExceptionDetail Property
        public static readonly DependencyProperty ShowExceptionDetailDependencyProperty = DependencyProperty.Register("ShowExceptionDetail",typeof(bool),typeof(Page),new PropertyMetadata(true));
        public bool ShowExceptionDetail
        {
            get { return (bool)GetValue(ShowExceptionDetailDependencyProperty); }
            set { SetValue(ShowExceptionDetailDependencyProperty, value); }
        }
        #endregion
        private void handleException(string context, Exception exception)
        {
            this.Dispatcher.BeginInvoke(delegate()
            {
                bool showExceptionDetail = this.ShowExceptionDetail;

                string message = "";

                Exception next = exception;
                do
                {
                    if (message.Length > 0) { message += ";" + Environment.NewLine; }
                    if (next.Message == null || next.Message.Length == 0) { message += next.GetType().FullName; }
                    else { message += next.Message; }
                    if (showExceptionDetail)
                    {
                        if (next.Data.Count > 0)
                        {
                            bool first = true;
                            message += " {";
                            foreach (string key in next.Data.Keys)
                            {
                                if (first) { first = false; }
                                else { message += ", "; }
                                message += key + "=\"" + next.Data[key] + "\"";
                            }
                            message += "}";
                        }
                        if (next.InnerException != next)
                        {
                            next = next.InnerException;
                            continue;
                        }
                    }
                    next = null;
                }
                while (next != null);
                MessageBox.Show(message, context, MessageBoxButton.OK);
            });
        }

        private const string SERVICE_LISTS_URL = "/_vti_bin/lists.asmx";
        void listSoapClient_GetListCollectionCompleted(object sender, GetListCollectionCompletedEventArgs e)
        {
            try { myList.Text = e.Result.ToString(); }
            catch (Exception exception) { handleException("Failed to get list collection", exception); }
        }
    }

Когда я запускаю ее, она попадает в "ListsSoapClientчасть, это ломается.Если вы покопаетесь в выводе об ошибке, он говорит, что доступ запрещен.Я пробовал различные способы отправки учетных данных, но, похоже, ни один из них не работает.«ClientCredentials.Windows» не поддерживается, а ClientCredentials.UsersName.Username доступен только для чтения.

1 Ответ

0 голосов
/ 24 марта 2010

Microsoft подтвердила, что NTLM еще не поддерживается в SDK.http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/thread/43a84dff-9447-4e95-8040-8a5447514fa0


ОБНОВЛЕНИЕ

Похоже, кто-то нашел решение http://zetitle.wordpress.com/2010/03/30/wp7-connecting-to-web-services-that-uses-authentication/

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