Windows Phone 7 Conectar a SharePoint a través de SOAP
-
21-09-2019 - |
Pregunta
Estoy haciendo mi segunda aplicación para la plataforma Windows Phone 7 Series y me parece que no puede conectarse a un servidor de SharePoint usando https.
99% de los siguientes no es mi código. He tomado prestada de http :. //blog.daisley-harrison.com/blog/post/Practical-Silverlight-and-SharePoint-Integration-Part-Two.aspx hasta que me puede entender mejor cómo funciona el jabón en la serie W7P
Sé que necesito alguna manera de enviar las credenciales más, pero no parece la API de Windows 7 para que pueda. 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>
Esta es mi página 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); }
}
}
Cuando ejecuto esto y de que llegue a la parte "ListsSoapClient", que se rompe. Si se mira hacia abajo en la salida de error que dice acceso denegado. He intentado varios métodos de envío de credenciales pero ninguno parece funcionar. "ClientCredentials.Windows" no es compatible y ClientCredentials.UsersName.Username es de sólo lectura.
Solución
Microsoft ha confirmado que NTLM no se admite todavía en el SDK. http: // social. msdn.microsoft.com/Forums/en-US/windowsphone7series/thread/43a84dff-9447-4e95-8040-8a5447514fa0
Actualizar
Parece que alguien encontró una solución http://zetitle.wordpress.com/2010/03/30/wp7-connecting-to-web-services-that-uses-authentication/