c# - 在 Windows Server 2012 上将字符串从 C DLL 返回到 C# DLL 时出现 HTTP 状态 502 错误

标签 c# c windows-server-2012

我正在运行 Windows Server 2012 R2 的服务器上设置旧的 C# DLL(用 Visual Studio 2003 编写)。当 DLL 调用返回字符串的 C DLL(也使用 Visual Studio 2003 编译)时,会引发错误。当 C DLL 尝试返回字符串时引发的错误消息如下:

System.Net.WebException: The request failed with HTTP status 502: Proxy Error ( The specified network name is no longer available. ).

代码在 XP 和 Windows 7 上运行没有任何问题,并且 C# DLL 正在由 ASP.NET Web 服务执行。

相关C#代码如下:

[DllImport("ESConnect.dll", SetLastError=false, CharSet=CharSet.Ansi)]
private static extern StringBuilder EsGetText(ref StringBuilder name, ref StringBuilder strReturned, ref size);
.
.
.
StringBuilder sbReturned = new StringBuilder();
StringBuilder sbTemporary = new StringBuilder();

sbTemporary=EsGetText(ref sbName, ref sbReturned, ref size);

函数 EsGetText 的 C 代码是:

FNEXPORT( PSZ __stdcall, EsGetText )( PSZ *ppszName, PSZ *ppszValue, PSHORT psSize)
{
  PFILE   pFile    = NULL;

  gdClock = USE( gdClock, fnTime() );

  TbxGetText( *ppszName, *ppszValue, (SHORT)( psSize ? *psSize : 0 ) );

   return( *ppszValue );
}

从日志记录中我可以看出,我添加了 EsGetText 已成功填充 ppszValue 中的值,但一旦执行返回命令,就会引发“HTTP 状态 502”错误。

任何有关可能导致此问题的原因的想法都非常受欢迎。 谢谢。

最佳答案

将 ASP.Net Web 服务设置为使用 ASP.Net 2.0 应用程序池。如果您没有任何可用的 ASP.Net 2.0 应用程序池,请确保您已安装 .Net 3.5.2。听起来您的旧 Web 服务有一些与 .Net 4 不兼容的配置。这种情况并不罕见,如果您不需要 .Net 4,则确实不需要升级代码/服务。

关于c# - 在 Windows Server 2012 上将字符串从 C DLL 返回到 C# DLL 时出现 HTTP 状态 502 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34093889/

相关文章:

c# - Asp.net mvc 项目发布后出现内部服务器错误

C# 映射罗盘点和搜索

c# - 如何在不直接将参数传递给 ln 实用程序的情况下从应用程序内部创建硬链接(hard link) (Linux)?

c++ - 在 C/C++ 中自动检测操作系统

azure - 无法通过 RDP 访问 Azure VM - 用户/组问题

asp.net - 如何向 IIS 8 重新注册 ASP.NET?

Redis 服务没有自动运行

c# - 操作内存中的PDF,然后将内容写入FileStream

c - 为什么主机系统上的 lua 比 linux vm 上的慢?

c - 为什么我无法加载 0x201.000 以下的可执行文件(哪个线性地址空间在 linux 进程中被视为可用?它记录在哪里?)