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。从 Adobe reader 您可以检查报告的属性并在字体选项卡上查看所需的条形码。那是你的字体。
我在其中一台生产服务器中遇到了一个奇怪的问题。我们有一个架构,在该架构中我们使用 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。从 Adobe reader 您可以检查报告的属性并在字体选项卡上查看所需的条形码。那是你的字体。