1

以下是将字节数组上传到我们大型机上的文件 DSN 的代码。它工作得很好。我想要做的是上传应该开始执行的 jcl。这就是我坚持的部分。我以前可以通过 WININET 来完成,但我想摆脱这种情况并在 vb.net 中使用更好的 FTP 命令

Public Shared Sub UploadToMainFrame( _
    ByVal ftpHost As String, _
    ByVal ftpMainframeDSN As String, _
    ByVal UserName As String, _
    ByVal Password As String, _
    ByVal DataToUpload As String)

    Dim ftpRequest As FtpWebRequest
    Dim ftpFullMainframePath = String.Format("ftp://{2}//'{3}'", ftpHost, ftpMainframeDSN)

    ftpRequest = WebRequest.Create(ftpFullMainframePath)
    ftpRequest.Credentials = New NetworkCredential(UserName, Password)
    ftpRequest.KeepAlive = True
    ftpRequest.UseBinary = False
    ftpRequest.Method = WebRequestMethods.Ftp.UploadFile

    ftpRequest.

    Dim byteArray() As Byte = StrToByteArray(DataToUpload)

    ftpRequest.ContentLength = byteArray.Length

    Dim ftpStream As Stream = ftpRequest.GetRequestStream()
    ftpStream.Write(byteArray, 0, byteArray.Length)
    ftpStream.Close()
    ftpStream = Nothing
    ftpRequest = Nothing

End Sub
4

1 回答 1

2

如果您希望您上传的文件被视为 JCL 作业,则很简单:

quote site filetype=jes

进入 FTP 命令。

这将指示 JES 将传入的数据集视为 JCL 并自动提交它。

如何使用 VB 实现这一点不在我的领域之内,但以下在 cmd.exe 中可以正常工作:

ftp -n bigiron.com -s:bigiron.ftp

包含bigiron.ftp

user MYNAME MYPASSWORD
quote site filetype=jes
quote site jeslrecl=80
put commands.jcl
bye

如果由于某种原因,您无法在 VB 中执行此操作,那么我的下一步将是在 z/OS 下运行一个已启动的任务,该任务监控特定数据集并提交出现在那里的任何新成员。

我会使用 sentinel 方法来确保您不会尝试提交半上传的作业:

  • 客户端将成员上传到日期数据集(例如,“DATA.MYJOB”)。
  • 客户端然后将虚拟成员上传到哨兵数据集(例如,“SENTINEL.MYJOB”)。
  • 开始任务不断在哨兵数据集中寻找新成员。
  • 如果找到,则将等效的数据成员提交给 JES 并删除哨兵和数据成员。

在 sysprogs 不热衷于允许那些外国机器直接访问 JES(尽管有密码)之前,我们实际上已经使用过这种方法。

更新,经过一番搜索:

它看起来不太适合"quote site"解决方案。这篇2006 年的帖子(但更新到 2009 年)似乎表明 MS 不允许"quote site"实施,因为它会暴露其代码的内部工作原理。我不会评论该论点的有效性,他们的推理可能已经改变,但我在当前文档中看不到任何表明他们已添加此功能的内容。

所以我猜你被外部 FTP 解决方案困住了。

于 2009-08-25T03:56:46.510 回答