C# 只有在从IIS中运行的代码发送消息时,什么才能导致.NET远程处理失败?

C# 只有在从IIS中运行的代码发送消息时,什么才能导致.NET远程处理失败?,c#,iis,remoting,C#,Iis,Remoting,拥有通过tcp通道使用远程处理从web应用(客户端)向中央服务器发送消息的应用 TcpClientChannel channel = new TcpClientChannel(); ChannelServices.RegisterChannel(channel, true); IPC message = (IPC)Activator.GetObject(typeof(IPC), remotingUrl); // IPC is class that is being

拥有通过tcp通道使用远程处理从web应用(客户端)向中央服务器发送消息的应用

TcpClientChannel channel = new TcpClientChannel();
ChannelServices.RegisterChannel(channel, true);
IPC message = (IPC)Activator.GetObject(typeof(IPC), remotingUrl);                
// IPC is class that is being 'remoted'
message.SomeMethod(....);
在大多数情况下,这可以正常工作,但在一组特定的web服务器上,它会出错。SomeMethod具有:-

System.IO.IOException:无法从传输连接读取数据:连接已关闭。在System.Net.Security.NegoState.ProcessAuthentication(LazyAsyncResult lazyResult)在System.Net.Security.NegotiateStream.AuthenticationsClient(NetworkCredential凭证、字符串targetName、ProtectionLevel requiredProtectionLevel、TokenImpersonationLevel allowedImpersonationLevel)上在System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.CreateAuthenticatedStream(流netStream、字符串machinePortAndSid

当然,根据IT Ops,工作的服务器和不工作的服务器之间没有区别

发送(客户端)web服务器和接收服务器之间/上没有硬件或软件防火墙

我在一个控制台应用程序中使用了相同的代码,当在有问题的发送服务器上运行时(即使在应用程序池帐户下运行时),它也可以正常工作

因此,我的结论是,只有当发送代码在某些服务器上的IIS上下文中运行时,才会失败

知道哪些设置(可能是aspnet.config或web.config或IIS元数据库)或任何其他可能导致此问题的信息

关键部件

  • 当从某些服务器上的web应用发送失败时工作
  • 在那些失败的服务器上,当作为控制台应用程序运行时,它可以正常工作
  • 问题必须在发送端

(谷歌搜索该错误消息的人还有一个关键部分——就像我没有这样做一样;)-安全通道设置在接收和发送服务器上是相同的).

您是否已检查IIS中的应用程序是否配置为使用配置为网络/域用户的应用程序池?还要进行测试,将您的应用程序池用户设置为本地管理员。如果有效,则与服务器上的某种安全设置有关。已作为应用程序池用户运行cmd line test,并且有效-因此我想我可以对用户权限进行折扣。能否对两者运行网络跟踪,以查看它们是否都使用相同的安全ntlm vs Kerberos(尝试wireshark)