Windows Phone 7 قم بالاتصال بـ SharePoint عبر SOAP
-
21-09-2019 - |
سؤال
أقوم بتقديم طلبي الثاني لمنصة Windows 7 Phone Series ولا يمكنني الاتصال بخادم SharePoint باستخدام HTTPS.
99 ٪ من ما يلي ليس رمزتي. لقد استعارتها من http://blog.daisley-harrison.com/blog/post/practical-silverlight-and-sharepoint-integration-bart-two.aspx حتى أتمكن من فهم كيفية عمل الصابون في سلسلة W7P.
أعلم أنني بحاجة إلى طريقة لإرسال بيانات الاعتماد أكثر ولكن يبدو أن واجهة برمجة تطبيقات 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>
هذه صفحتي الرئيسية:
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.
المحلول
أكدت Microsoft أن NTLM غير مدعوم بعد في SDK. http://social.msdn.microsoft.com/forums/en-us/windowsphone7series/thread/43a84dff-9447-4e95-8040-8a547514fa0
تحديث
يبدو أن شخصًا ما وجد حلًا http://zetitle.wordpress.com/2010/03/30/wp7-connecting-to-web-services-that-uses-authentic/