System.Byte[] 给出了意想不到的价值

System.Byte[] gives unexpected value

我在其中一台生产服务器中遇到了一个奇怪的问题。我们有一个架构,在该架构中我们使用 Web 服务与 .NET 应用程序集成了 AX。我们使用 System.IO 对象将 pdf 报告转换为字节,并通过网络服务将此信息发送到应用程序。我们使用的方法一直运行良好,直到最近我们开始看到奇怪的结果。生产环境返回的字节数组与其余环境不同。代码库显然在所有环境中都是相同的。字节数组有一个很大的数字,大约 47000,其余环境给出大约 3000。这会导致在应用程序中生成报告时出现问题。

补充一下,有问题的报告是一个项目及其条形码的 AX SSRS 报告。该报告在 AX 客户端中打印良好。但是为了将它传递给 Web 服务,报告被转换为字节并发送到应用程序,然后应用程序将其转换回图像并显示在 UI 上。由于生产时返回的字节数不同,打印的图像有货品编号,但没有条形码。而不是条形码,显示空白 space。我已经检查过条形码字体是否安装在 SSRS 服务器上,如果我直接在 AX 中打印报告,打印效果很好。我知道架构本来可以更简单,但这就是我目前所拥有的,并且需要让它发挥作用。任何帮助将不胜感激。谢谢

static System.Byte[] test()
{
    str _filePath = "C:\Users\Harry\Desktop\ABC.PDF";

    System.Byte[]           pdfBuffer;
    System.IO.FileInfo      fileInfo;
    System.IO.FileStream    fs;
    int                     size;
    Set                     permissionSet = new Set(Types::Class);

    permissionSet.add(new FileIOPermission(_filePath,'r'));
    permissionSet.add(new InteropPermission(InteropKind::ClrInterop));

    CodeAccessPermission::assertMultiple(permissionSet);

    //Load the file
    fileInfo = new System.IO.FileInfo(_filePath);
    //Initiallize the byte array by setting the length of the file
    size = int642int(fileInfo.get_Length());
    pdfBuffer = new System.Byte[size]();
    // Stream the file
    fs = new System.IO.FileStream(fileInfo.get_FullName(), System.IO.FileMode::Open, System.IO.FileAccess::Read);
    fs.Read(pdfBuffer, 0, pdfBuffer.get_Length());
    fs.Close();
    fs.Dispose();

    //Revert the access
    CodeAccessPermission::revertAssert();

    return pdfBuffer;    
}

解决方案是在报告服务器上安装条形码字体并重新启动服务器。我们延迟了重新启动服务器。 要找到您需要的字体,请在 AX 客户端中生成 ssrs 报告并将其导出为 pdf。从 Adob​​e reader 您可以检查报告的属性并在字体选项卡上查看所需的条形码。那是你的字体。