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

时间:2015-12-04 17:16:19

标签: 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:请求失败,HTTP状态为502:   代理错误(指定的网络名称不再可用。)。

代码在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"提出错误。

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

1 个答案:

答案 0 :(得分:0)

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