在AZure里,一般用Azure Blob做数据传输的中间媒介,D365 FO的数据生成到Blob里,其他系统从Blob里获取,或者相反,这样就不用单独设置FTP服务器了,当然这个是要钱的。
要想使用Blob,需要在AZure上创建存储账号,创建好存储账户以后,就可以设置访问密钥了。
.NET提供了读写Azure里的类库,读写AZure Blob非常方便,访问只需要一个连接字符串做认证就可以了,用C#简单封装了一下访问的类库供D365 FO调用。
1 public class AZureBlobHelper 2 { 3 CloudBlobContainer blobContainer; 4 string path; 5 6 public AZureBlobHelper( 7 string _connectionString, 8 string _containerName, 9 string _path) 10 { 11 blobContainer = CloudStorageAccount.Parse(_connectionString) 12 .CreateCloudBlobClient() 13 .GetContainerReference(_containerName); 14 15 if (_path != string.Empty && _path.EndsWith("/") == false) 16 { 17 path = _path + "/"; 18 } 19 else 20 { 21 path = _path; 22 } 23 } 24 public bool upload(MemoryStream _stream, string _fileName) 25 { 26 CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(path + _fileName); 27 blockBlob.UploadFromStream(_stream, null, null, null); 28 return true; 29 } 30 31 public string[] getFileList() 32 { 33 List<string> list = new List<string>(); 34 CloudBlobDirectory direcotry = blobContainer.GetDirectoryReference(path); 35 foreach(var file in direcotry.ListBlobs()) 36 { 37 string fileName = file.Uri.Segments[file.Uri.Segments.Length - 1]; 38 list.Add(fileName); 39 } 40 return list.ToArray(); 41 } 42 public MemoryStream download(string _fileName) 43 { 44 MemoryStream ms = new MemoryStream(); 45 CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(path + _fileName); 46 blockBlob.DownloadToStream(ms); 47 return ms; 48 } 49 public void delete(string _fileName) 50 { 51 CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(path + _fileName); 52 blockBlob.Delete(); 53 } 54 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。