2010-03-21 3 views
0

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

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

Я знаю, что мне нужен способ отправки учетных данных, но API-интерфейс win 7, похоже, не позволяет вам. 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> 

Это моя maincode страница:

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 - только для чтения.

+0

Более на форумах MSDN я получил несколько ответов с людьми, имеющими сходные проблемы. Похоже, что это ошибка в текущем SDK. http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/thread/43a84dff-9447-4e95-8040-8a5447514fa0 –

ответ

Смежные вопросы