2012-05-13 87 views
1

我有一个VS2010 MVC3解决方案调用2个WCF服务。在我的第一台电脑上一切正常。我有另一台计算机,我安装了相同的操作系统,相同的VS,相同的SQL Server Express,相同的IIS,...我在第二台计算机上复制了我的解决方案的源代码。运行解决方案时一切正常。无法浏览到WCF服务:HTTP 400错误请求

但是这第二台计算机上:

  • 我无法浏览到服务URL!? (1)

  • 我不能做“更新服务参考”! (2)

(1)当我浏览到HTTP://localhost/PLATONServices/RequestService.svc我有一个HTTP400 BAD REQUEST错误。

(2)我得到了一个请求失败的HTTP状态400:不良请求元数据包含无法解决的参考:'http://localhost/PLATONServices/RequestService.svc'。

有什么想法?

由于两台计算机上的代码源都相同,并且第一台计算机上的所有内容都正常,因此问题出在别的地方。我在两台计算机上都使用IIS6,但看不到任何差异。

我整天搜索没有成功。

谢谢。


UPDATE

这里是WCF的跟踪:

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent"> 
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system"> 
<EventID>131075</EventID> 
<Type>3</Type> 
<SubType Name="Error">0</SubType> 
<Level>2</Level> 
<TimeCreated SystemTime="2012-05-13T08:33:37.1384484Z" /> 
<Source Name="System.ServiceModel" /> 
<Correlation ActivityID="{5d80ddb2-6cf8-4e65-bc9b-3f4b7b880605}" /> 
<Execution ProcessName="w3wp" ProcessID="5280" ThreadID="13" /> 
<Channel /> 
<Computer>THINKPAD</Computer> 
</System> 
<ApplicationData> 
<TraceData> 
<DataItem> 
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Error"> 
<TraceIdentifier>http://msdn.microsoft.com/fr-BE/library/System.ServiceModel.Diagnostics.ThrowingException.aspx</TraceIdentifier> 
<Description>Throwing an exception.</Description> 
<AppDomain>/LM/W3SVC/1/ROOT/PLATONServices-2-129813716146273047</AppDomain> 
<Exception> 
<ExceptionType>System.ServiceModel.ProtocolException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType> 
<Message>There is a problem with the XML that was received from the network. See inner exception for more details.</Message> 
<StackTrace> 
at System.ServiceModel.Channels.HttpRequestContext.CreateMessage() 
at System.ServiceModel.Channels.HttpChannelListener.HttpContextReceived(HttpRequestContext context, Action callback) 
at System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult result) 
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest() 
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest() 
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(Object state) 
at System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) 
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 
</StackTrace> 
<ExceptionString>System.ServiceModel.ProtocolException: There is a problem with the XML that was received from the network. See inner exception for more details. ---&gt; System.Xml.XmlException: The body of the message cannot be read because it is empty. 
    --- End of inner exception stack trace ---</ExceptionString> 
<InnerException> 
<ExceptionType>System.Xml.XmlException, System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType> 
**<Message>The body of the message cannot be read because it is empty.</Message>** 
<StackTrace> 
at System.ServiceModel.Channels.HttpRequestContext.CreateMessage() 
at System.ServiceModel.Channels.HttpChannelListener.HttpContextReceived(HttpRequestContext context, Action callback) 
at System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult result) 
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest() 
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest() 
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(Object state) 
at System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) 
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 
</StackTrace> 
<ExceptionString>**System.Xml.XmlException: The body of the message cannot be read because it is empty.**</ExceptionString> 
</InnerException> 
</Exception> 
</TraceRecord> 
</DataItem> 
</TraceData> 
</ApplicationData> 
</E2ETraceEvent> 
+0

是列出的应用程序中设置WCF相关组件安装在第二台机器上?这些是通过“打开或关闭Windows功能”对话框配置的,可以在Windows的“添加/删除程序”中找到。它们通常在“Microsoft .Net Framework 3.5.1”部分。 – GCaiazzo

+0

我的安装与我的其他电脑完全一样。我也尝试在“打开或关闭Windows功能”中的“Microsoft .Net Framework 3.5.1”下安装“WCF HTTP激活”,但未纠正问题。不管怎么说,还是要谢谢你。 – Bronzato

+0

你打开/查看了服务跟踪日志吗?这应该告诉你什么是失败 – SCB

回答

相关问题