如何通过ClientID和ClientSecret使用BizTalk SharePoint适配器发送Excel文件?
核心原因
原生Windows SharePoint Services适配器不支持应用权限(ClientID/ClientSecret)认证机制,仅兼容Windows身份验证、表单身份验证等传统方式,因此直接将ClientID填入用户名输入框会触发System.ArgumentException错误(事件ID:12310)。
可行实现方案
方案1:使用SharePoint Online适配器(推荐)
如果你的环境是BizTalk Server 2016及以上版本,直接使用SharePoint Online适配器,它原生支持ClientID/ClientSecret认证:
- 配置发送端口时,选择
SharePoint Online适配器类型 - 在适配器属性的“安全”选项卡中,选择“应用程序凭据”认证方式
- 依次填入
ClientID和ClientSecret,配置好SharePoint站点URL、目标文档库路径等参数即可
方案2:自定义代码实现(适配旧版BizTalk)
如果只能使用旧版BizTalk或Windows SharePoint Services适配器,需通过自定义组件绕开原生适配器的限制:
- 编写.NET类库,使用SharePoint CSOM(Client Side Object Model)通过ClientID和ClientSecret建立与SharePoint的连接
- 将类库封装为BizTalk的自定义管道组件或业务流程中的.NET调用组件
- 在BizTalk业务流程中接收Excel文件内容,调用自定义组件完成上传操作
- CSOM核心代码示例:
using Microsoft.SharePoint.Client; using System.IO; using System.Security; public void UploadExcelToSharePoint(string siteUrl, string clientId, string clientSecret, string libraryName, string fileName, Stream fileStream) { using (ClientContext context = new ClientContext(siteUrl)) { context.Credentials = new SharePointOnlineCredentials(clientId, ConvertToSecureString(clientSecret)); Web web = context.Web; List library = web.Lists.GetByTitle(libraryName); context.Load(library.RootFolder); context.ExecuteQuery(); FileCreationInformation fileInfo = new FileCreationInformation(); fileInfo.ContentStream = fileStream; fileInfo.Url = Path.Combine(library.RootFolder.ServerRelativeUrl, fileName); fileInfo.Overwrite = true; Microsoft.SharePoint.Client.File uploadedFile = library.RootFolder.Files.Add(fileInfo); context.Load(uploadedFile); context.ExecuteQuery(); } } private SecureString ConvertToSecureString(string input) { SecureString secureString = new SecureString(); foreach (char c in input) { secureString.AppendChar(c); } return secureString; }
方案3:使用Azure Logic Apps中转
通过Azure Logic Apps作为中间层,BizTalk先将Excel文件发送到Logic Apps,再由Logic Apps用ClientID/ClientSecret认证上传到SharePoint:
- 在Logic Apps中创建HTTP触发的流程,添加“SharePoint - 创建文件”动作,配置时选择“应用程序权限”并填入ClientID和ClientSecret
- BizTalk配置发送端口为HTTP适配器,指向Logic Apps的触发URL,将Excel文件作为请求体发送
内容的提问来源于stack exchange,提问作者Davon
相关产品推荐
相关产品推荐

