我正在运行 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/