SharePoint のデフォルトのCopyIntoItems
方法を使用して、SharePoint のユーザー名とパスワードを渡すことにより、外部 Web アプリケーションから SharePoint に新しいファイルをアップロードするにはどうすればよいですか。MVC Web アプリケーションで SQL サーバー ベースのフォーム認証を使用しているため、既定の資格情報を使用したくありません。
私は次のことを試しました:
CopySoapClient
この URL に接続されている Web サービスはどこにありますか。
http://sharepointaddress/_vti_bin/copy.asmx
コードサンプル
public static bool UploadSharePointFile(string file, string destination)
{
bool success = false;
CopySoapClient client = new CopySoapClient();
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential("username", "password", "domain");
try
{
client.Open();
string filename = Path.GetFileName(file);
string destinationUrl = destination + filename;
string[] destinationUrls = { destinationUrl };
FieldInformation i1 = new FieldInformation { DisplayName = "Title", InternalName = "Title", Type = FieldType.Text, Value = filename };
FieldInformation[] info = { i1 };
CopyResult[] result;
byte[] data = File.ReadAllBytes(file);
uint ret = client.CopyIntoItems(filename, destinationUrls, info, data, out result);
if (result != null && result.Length > 0 && result[0].ErrorCode == 0)
success = true;
}
finally
{
if (client.State == System.ServiceModel.CommunicationState.Faulted)
client.Abort();
if (client.State != System.ServiceModel.CommunicationState.Closed)
client.Close();
}
return success;
}
問題は、次のエラーが発生し続けることです。
HTTP 要求は、クライアント認証方式 'Negotiate' では許可されていません。サーバーから受信した認証ヘッダーは「Negotiate,NTLM」でした。
これをWebサービスバインディングのweb.configに入れようとしたとき:
<security mode="Transport">
<transport clientCredentialType="Ntlm" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
次に、次のエラーが発生しました。
指定された URI スキーム「http」は無効です。「https」が必要です。パラメータ名:経由