这可能是由于服务端点绑定不使用HTTP协议

我有一个WCF服务在我的本地机器上正常运行。 我把它放在服务器上,我收到以下错误:

接收到http://xx.xx.x.xx:8200 / Services / WCFClient.svc的HTTP响应时发生错误。 这可能是由于服务端点绑定不使用HTTP协议。 这也可能是由于HTTP请求上下文被服务器中止(可能是由于服务closures)。 查看服务器日志了解更多详情。]

我已经在url中的服务,它正常工作。 我所做的所有function是返回一个string的图像名称,所以传递的数据不是很多。 我已经跟踪了日志,它给了我相同的信息。 这是我的客户端configuration:

<binding name="basicHttpBinding_IWCFClient" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> <endpoint name="basicHttpBinding_IWCFClient" address="http://localhost:4295/Services/WCFClient.svc" binding="basicHttpBinding" bindingConfiguration="basicHttpBinding_IWCFClient" behaviorConfiguration="WCFGraphicManagementTool.Services.ClientBehavior" contract="WCFClient.IWCFClient" /> 

这是我的服务器configuration:

 <service behaviorConfiguration="WCFGraphicManagementTool.Services.WCFClientBehavior" name="WCFGraphicManagementTool.Services.WCFClient"> <endpoint name="basicHttpBinding_IWCFClient" address="" binding="basicHttpBinding" contract="WCFGraphicManagementTool.Contracts.IWCFClient" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> <behavior name="WCFGraphicManagementTool.Services.WCFClientBehavior"> <dataContractSerializer maxItemsInObjectGraph="2147483647" /> <serviceThrottling maxConcurrentCalls="120" maxConcurrentSessions="120" maxConcurrentInstances="120" /> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> 

它会在服务器上设置,因为它在我的本地机器上工作?

我有这个问题“这可能是由于服务端点绑定不使用HTTP协议”和WCF服务将closures(在开发机器)

我发现:就我而言,问题是因为枚举,

我解决了这个问题

  [DataContract] [Flags] public enum Fruits { [EnumMember] APPLE = 1, [EnumMember] BALL = 2, [EnumMember] ORANGE = 3 } 

我不得不用DataContract,Flags和EnumMember属性来枚举每一个枚举成员。

我看到这个msdn参考后解决了这个问题:

我想有序列化的问题,你可以在<configuration>部分find确切的错误,只需要在service config下面添加代码即可。

configuration更新"App_tracelog.svclog"文件将创build,您的服务存在只需要打开.svclog文件,并在左侧面板上find红色线,这是错误的,看到它的描述了解更多信息。

我希望这将有助于find你的错误。

 <system.diagnostics> <sources> <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing"> <listeners> <add name="ServiceModelTraceListener" /> </listeners> </source> <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"> <listeners> <add name="ServiceModelTraceListener" /> </listeners> </source> <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing"> <listeners> <add name="ServiceModelTraceListener" /> </listeners> </source> </sources> <sharedListeners> <add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" /> </sharedListeners> </system.diagnostics> 

我有这个相同的错误,问题是序列化。 我设法find真正的问题使用服务跟踪查看器http://msdn.microsoft.com/en-us/library/ms732023.aspx和解决它很容易。; 也许这会帮助别人。

解决scheme与DataContract,标志为枚举看起来有点难看。 在我的情况下,通过在枚举中添加类似“NotSet = 0”的方法解决了问题:

 public enum Fruits { UNKNOWN = 0, APPLE = 1, BALL = 2, ORANGE = 3 } 

在我的例子中,错误是由于我的一个复杂types有一个没有set方法的属性而产生的。

串行器因为这个事实而抛出exception。 增加了内部设置的方法,它一切正常。

找出为什么发生这种事情的最好方法(在我看来)是启用跟踪logging。

我通过将以下部分添加到我的web.config中来实现此目的:

  <system.diagnostics> <sources> <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "c:\log\Traces.svclog" /> <add type="System.Diagnostics.DefaultTraceListener" name="Default" /> </listeners> </source> <source propagateActivity="true" name="System.ServiceModel" switchValue="Verbose,ActivityTracing"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "c:\log\Traces.svclog" /> <add type="System.Diagnostics.DefaultTraceListener" name="Default" /> </listeners> </source> </sources> <trace autoflush="true" /> </system.diagnostics> 

一旦设置,我运行我的客户端,得到exception,并检查“Traces.svclog”文件。 从那里,我只需要find例外。

我解决了这个问题。 它最终成为我的configuration文件的path是错误的。 WCF的错误有时是很有帮助的。

我已经看到了由对象图中的循环引用引起的这个错误。 包含一个指向父对象的指针将导致序列化程序循环,并最终超过最大消息大小。

我有这个问题,因为我configuration我的WCF服务返回一个System.Data.DataTable。

它在我的testingHTML页面中工作得很好,但是当我把它放到我的Windows窗体应用程序中时就爆炸了。

我必须进入并将服务的操作合同签名从DataTable更改为DataSet,并相应地返回数据。

如果您有这个问题,您可能需要为您的服务添加一个额外的操作合同,因此您不必担心会破坏依赖于现有服务的代码。

这可能是由于很多原因造成的。 以下是其中的几个:

  1. 如果您正在使用复杂的数据合同对象(这意味着具有更多子定制对象的定制对象),请确保您具有使用DataContract和DataMember属性装饰的所有定制对象
  2. 如果您的数据协定对象使用inheritance,请确保所有基类具有DataContract和DataMember属性。 此外,你需要让基类用[KnownType(typeof(BaseClassType))]属性指定派生类( 在这里查看更多信息 )。

  3. 确保所有的数据合同对象属性都有获取和设置属性。

我的问题是太多的项目正在客户端和服务器之间传递。 我不得不改变这个设置在双方的行为。

 <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 

有关此问题的更多信息,请参阅: 现有连接已被远程主机强制closures – WCF

我的问题最终是因为我的数据传输对象太复杂。 从简单的属性开始,比如public long Id { get; set; } public long Id { get; set; } public long Id { get; set; }一旦你开始工作,而不是根据需要添加额外的东西。

我的问题是,我的服务返回types是string。 但是我返回了xmltypes的string:

 <reponse><state>1</state><message>Operation was successfull</message</response> 

所以错误被抛出。

这个错误可能是因为合同不匹配。 考虑下面的三层应用程序…

UI层
|
过程层
|
数据访问层
– >进程和UI层之间的契约具有相同的缺失(Onhold = 3)。 枚举:开始= 1,停止= 2. – >数据访问和过程层之间的合同枚举枚举:开始= 1,停止= 2,保持= 3。

在这种情况下,我们将在过程层响应中得到相同的错误。

其他合同在多层次应用程序不匹配时出现同样的错误。

这可能与您的具体问题没有关系,但是您提到的错误消息有很多原因,其中之一是为[OperationContract]使用抽象,接口或WCF客户端代码不知道的返回types。

检查下面的post(和解决scheme)

https://stackoverflow.com/a/5310951/74138

我认为解决这个问题的最好方法是遵循错误build议,从而寻找服务器日志。 启用我添加的日志

  <system.diagnostics> <sources> <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\logs\TracesServ_ce.svclog" /> </listeners> </source> </sources> </system.diagnostics> 

然后,转到c:\ logs \ TracesServ_ce.svclog,使用Microsoft服务跟踪查看器打开它。 看看问题到底是什么

我为此奋斗了两天,并试图从这个post和其他许多人的每个答案,并分享我的解决scheme,因为症状是相同的,但问题是不同的。

问题在于应用程序池configuration了内存限制,并且在可变的一段时间后才会被回收。

希望这可以帮助别人!
问候,

在我的情况

我的服务具有download Filesfunction

而这个错误只会在试图下载Big Files

所以我find了这个答案来增加maxRequestLengthweb.config所需的值

我知道这很奇怪,但问题解决了

如果你不做任何上传或下载操作,也许这个答案不会帮助你

也有这个问题,这是因为忘记装饰我的模型与DataContract和DataMember属性

对我来说这个错误的解决方法很奇怪。 这是EndpointAddress端口地址的问题。 在您的文件的Visual Studio端口地址(例如Service1.svc)中,您的wcf项目的端口地址必须与您在EndpointAddress中input的端口地址相同。 让我详细描述你的这个解决scheme。

有两个步骤来检查端口地址。

  1. 在您的WCF项目中,右键单击您的服务文件(例如Service1.svc) – >现在在浏览器中select在浏览器中查看您的URL为http:// localhost:61122 / Service1.svc ,现在记下您的端口地址为一个61122

  2. 右键单击您的wcf项目 – >select属性 – >转到Web选项卡 – >现在在服务器部分 – >select使用Visual Studio开发服务器 – >select特定端口,并给出我们早先从我们的Service1find的端口地址。 svc服务。 那是(61122)

此前我有不同的端口地址。 正确指定端口地址后,我的问题就解决了。

我希望这可以解决你的问题。

为了解决这个问题,我们必须将AppPool身份更改为pipe理员帐户 。