从同一服务器上的 MVC 调用 WCF 服务时出现 SocketException

Posted

技术标签:

【中文标题】从同一服务器上的 MVC 调用 WCF 服务时出现 SocketException【英文标题】:SocketException when calling WCF service from MVC on same server 【发布时间】:2012-05-05 08:40:45 【问题描述】:

我有一个带有 IIS 7.5 和一个 IP 的 Windows 2008 服务器。根目录下有两个Application,/web 和/service。 /web 是 MVC4 应用程序,/service 是 WCF 4.0 服务。

当我从 MVC 使用服务时,我使用以下代码:

// Create the web request  
HttpWebRequest request = WebRequest.Create(TripServiceUrl + id) as HttpWebRequest;

// Get response  
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)

    // Get the response stream  
    StreamReader reader = new StreamReader(response.GetResponseStream());

    // Console application output  
    tripJson = reader.ReadToEnd();
 

我得到以下 SocketException:

[SocketException (0x274c): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 10.243.6.43:80]
System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) +273
System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception) +584

但是,我可以从服务器上的浏览器中看到 10.243.6.43:80(内部地址)并成功调用该服务。该 IP 不可公开访问。

我应该进行什么配置才能使这样的自引用调用起作用?

【问题讨论】:

为什么使用WebRequest 来使用 WCF 服务而不是强类型客户端代理? 您可以在客户端应用与在服务器上相同的绑定配置,并使用强类型代理来使用它,并将序列化内容留给基础设施。无论如何,这实际上是题外话,在这种情况下,这不是导致您出现问题的原因。 我不知道有人能做到这一点! 是否可以从服务器本身访问 10.243.6.43:80 浏览器? 是的。我在上面提到过。 【参考方案1】:

这可能是一个环回问题(安全问题)。见http://support.microsoft.com/kb/896861。

总结一下:

在注册表编辑器中,找到并单击以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 右键单击 Lsa,指向新建,然后单击 DWORD 值。 键入 DisableLoopbackCheck,然后按 Enter。 右键单击 DisableLoopbackCheck,然后单击修改。 在数值数据框中,键入 1,然后单击确定。

不要按照 DisableStrictNameChecking 的步骤操作。

您还会发现很多不这样做的理由(毕竟您是在禁用安全检查),然后很多人说这是让 SharePoint 正常工作的唯一方法。无论如何,它将帮助您确定这是否是问题所在。

【讨论】:

不幸的是,这似乎不是问题。 我收回了它,它确实有效!我在测试期间引入了一个配置错误。谢谢!

以上是关于从同一服务器上的 MVC 调用 WCF 服务时出现 SocketException的主要内容,如果未能解决你的问题,请参考以下文章

从 Windows 服务调用时出现 WCF 安全异常

从 Windows 应用程序访问托管在 IIS 上的 WCF 服务时出现问题

调用 WCF Web 服务时出现错误的 Json 响应

MVC 中的下拉菜单未加载 WCF 服务调用的编辑函数上的数据

如何从 MVC 应用程序发出的 WCF 服务调用中获取域\用户名?

调用 Sitefinity WCF Web 服务时出现错误 401