我正在运行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"提出错误。
关于可能导致此问题的任何想法都非常受欢迎。 感谢。
答案 0 :(得分:0)
将您的ASP.Net Web服务设置为使用ASP.Net 2.0应用程序池。如果您没有可用的ASP.Net 2.0应用程序池,请确保安装了.Net 3.5.2。听起来您的旧Web服务有一些不兼容.Net 4的配置。这并不罕见,如果您不需要.Net 4,则无需升级代码/服务。