You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ClientID和ClientSecret使用BizTalk SharePoint适配器发送Excel文件?

解决BizTalk通过ClientID/ClientSecret向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:26:01