Я использовал WCF, работающий с BDC, во многих проектах. То, что я обычно делаю, описано ниже.
1) Создайте отдельное решение SharePoint под названием SPCommon
2) Добавить ссылку на сервис
3) Создать MyAppSettings.cs
public class MyAppSettings
{
public string MyServiceEndPoint
{
get;
set;
}
}
4) Создать ConfigurationManager.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using System.Configuration;
using System.Web.Configuration;
using Microsoft.SharePoint.Administration;
namespace MyApp
{
public class ConfigurationManager
{
SPSite site;
public ConfigurationManager(SPSite site)
{
this.site = site;
}
public MyAppSettings GetAppSettings()
{
try
{
System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration("/", site.WebApplication.Name);
AppSettingsSection appSettingSection = config.AppSettings;
MyAppSettings settings = new MyAppSettings();
settings.MyServiceEndPoint = appSettingSection.Settings["MyServiceEndPoint"].Value;
return settings;
}
catch (Exception ex)
{
// Log Error
}
return null;
}
}
}
5) Создайте файл MyServiceConnection.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyServiceReference;
using System.ServiceModel;
using Microsoft.SharePoint;
namespace MyApp
{
public class MyServiceConnection
{
public const int _maxBufferSize = 2147483647;
public const int _maxReceivedBufferSize = 2147483647;
public const int _maxStringContentLength = 2147483647;
public const int _maxArrayLength = 2147483647;
public const int _maxBytesPerRead = 2147483647;
public const int _maxNameTableCharCount = 2147483647;
public const int _maxDepth = 2147483647;
public static MyServiceProxyClient GetMyServiceProxyClient()
{
SPSite site = SPContext.Current.Site;
// Get the EndPointUrl from Web.config appsetting
ConfigurationManager configMgr = new ConfigurationManager(site);
var appSetting = configMgr.GetAppSettings();
EndpointAddress myServicecrmEndPoint;
if (appSetting != null)
{
myServiceEndPoint = new EndpointAddress(appSetting.MyServiceEndPoint);
var proxy = new MyServiceProxyClient(
new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly)
{
MaxBufferSize = _maxBufferSize,
MaxReceivedMessageSize = _maxReceivedBufferSize,
ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
{
MaxStringContentLength = _maxStringContentLength,
MaxArrayLength = _maxArrayLength,
MaxBytesPerRead = _maxBytesPerRead,
MaxNameTableCharCount = _maxNameTableCharCount,
MaxDepth = _maxDepth
},
},
myServiceEndPoint
);
return proxy;
}
else
{
// Log Error
return null;
}
}
}
}
6) В решении для внешнего списка добавьте ссылку на проект SPCommon
7) Вызовите метод сервиса ReadMyList (), как показано ниже
MyServiceProxyClient service = SPCommon.GetMyServiceProxyClient();
listData = service.ReadMyList();
8) Добавить настройку приложения в Web.config
<appSettings>
<add key="MyServiceEndPoint" value="http://localhost:8101/MyService.svc" />
</appSettings>
9) Обязательно разверните решения SPCommon и External List.