Azure functions C#使用凭据从azure功能访问本地网络共享

Azure functions C#使用凭据从azure功能访问本地网络共享,azure-functions,azure-functions-runtime,Azure Functions,Azure Functions Runtime,一些背景: 目前,我们在由托管合作伙伴托管的FTP服务器上接收来自多个数据供应商的文件。作为新项目的一部分,我们正在设置Azure功能。此功能在我们的托管合作伙伴为VPN/专用网络访问设置的ressource组中运行。此函数是将Excel/VBA中的多个旧程序替换为Azure函数过程中的第一步 我们需要的是将文件从FTP服务器移动到另一个内部(文件)服务器(以支持某些遗留程序)。FTP服务器位于DMZ中,因此不像文件服务器那样是域的一部分 现在,我已经在谷歌上搜索了几个小时,找到了一个解决方案,

一些背景: 目前,我们在由托管合作伙伴托管的FTP服务器上接收来自多个数据供应商的文件。作为新项目的一部分,我们正在设置Azure功能。此功能在我们的托管合作伙伴为VPN/专用网络访问设置的ressource组中运行。此函数是将Excel/VBA中的多个旧程序替换为Azure函数过程中的第一步

我们需要的是将文件从FTP服务器移动到另一个内部(文件)服务器(以支持某些遗留程序)。FTP服务器位于DMZ中,因此不像文件服务器那样是域的一部分

现在,我已经在谷歌上搜索了几个小时,找到了一个解决方案,我相信我已经找到了它

用法:

using (new NetworkConnection(ftpServerSettings.UNCPath, new NetworkCredential(ftpServerSettings.UserName, ftpServerSettings.Password, ftpServerSettings.Domain)))
            {
                using (new NetworkConnection(fileServerSettings.UNCPath, new NetworkCredential(fileServerSettings.UserName, fileServerSettings.Password, fileServerSettings.Domain)))
                {
                    handler.HandleFolders(bankDataRepository.GetFolderSettings());
                }
            }
在本地运行时,它可以正常工作,但从Azure运行时,我会收到System.ComponentModel.Win32Exception,消息为“访问被拒绝”

我不确定Azure函数中是否允许使用DllImport,是否需要FullTrust(我在somwhere中看到了一些信息),或者问题是否出在服务器上的权限上


有人能给我点化一下吗?

所以很多谷歌搜索结果让我发现: 链接到

它指出:

受限制的传出端口 无论地址如何,应用程序都无法使用端口445、137、138和139连接到任何位置。换句话说,即使连接到非专用IP地址或虚拟网络的地址,也不允许连接到端口445、137、138和139


因此,我们试图做的是不可能的,与DllImport等没有任何关系。我想如果不尝试使用SMB,这一切都很好。

因此,大量的谷歌搜索导致我发现: 链接到

它指出:

受限制的传出端口 无论地址如何,应用程序都无法使用端口445、137、138和139连接到任何位置。换句话说,即使连接到非专用IP地址或虚拟网络的地址,也不允许连接到端口445、137、138和139


因此,我们试图做的是不可能的,与DllImport等没有任何关系。如果不尝试使用SMB,我想这很好。

尝试一个不在“独立”定价层的应用程序服务或功能应用程序

尝试一个不在“独立”定价层的应用程序服务或功能应用程序

派对晚了一点?您是否阅读了我的回答,得出所需端口已关闭的结论?试过在一个非孤立的地方做吗?派对有点晚了?您是否阅读了我的回答,得出所需端口已关闭的结论?试过从一个非孤立的实例中执行吗?
using (new NetworkConnection(ftpServerSettings.UNCPath, new NetworkCredential(ftpServerSettings.UserName, ftpServerSettings.Password, ftpServerSettings.Domain)))
            {
                using (new NetworkConnection(fileServerSettings.UNCPath, new NetworkCredential(fileServerSettings.UserName, fileServerSettings.Password, fileServerSettings.Domain)))
                {
                    handler.HandleFolders(bankDataRepository.GetFolderSettings());
                }
            }