当前位置:编程学习 > C#/ASP.NET >>

关于wcf的 "由于服务器中止了 HTTP 请求上下文(可能由于服务关闭) "错误

web.config内容如下 
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
  <system.web> 
    <compilation debug="true" /> 
  </system.web> 
  <!-- 部署服务库项目时,必须将配置文件的内容添加到 
  主机的 app.config 文件中。System.Configuration 不支持库的配置文件。--> 
  <system.serviceModel> 
    <services> 
      <service name="Microsoft.ServiceModel.Samples.WeatherService" POST http://forum.csdn.net/PointForumviceBehavior"> 
        <host> 
          <baseAddresses> 
            <add baseAddress = "http://172.16.81.71:8731/servicemodelsamples/service/WeatherService/" /> 
          </baseAddresses> 
        </host> 
        <!-- Service Endpoints --> 
        <!-- 除非完全限定,否则地址将与上面提供的基址相关 --> 
        <endpoint address ="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.IWeatherService"> 
          <!-- 
              部署时,应删除或替换下列标识元素,以反映 
              在其下运行部署服务的标识。删除之后,WCF 将 
              自动推导相应标识。 
          --> 
          <identity> 
            <dns value="172.16.81.71"/> 
          </identity> 
        </endpoint> 
        <!-- Metadata Endpoints --> 
        <!-- 元数据交换终结点由服务用于向客户端做自我描述。--> 
        <!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除--> 
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
      </service> 
    </services> 
    <behaviors> 
      <serviceBehaviors> 
        <behavior name="WeatherServiceBehavior"> 
          <!-- 为避免泄漏元数据信息, 
          请在部署前将以下值设置为 false 并删除上面的元数据终结点  --> 
          <serviceMetadata httpGetEnabled="True"/> 
          <!-- 要接收故障异常详细信息以进行调试, 
          请将下值设置为 true。在部署前 
            设置为 false 以避免泄漏异常信息--> 
          <serviceDebug includeExceptionDetailInFaults="False" /> 
        </behavior> 
      </serviceBehaviors> 
    </behaviors> 
  </system.serviceModel> 
</configuration> 

程序运行时报告错误如下: 

接收对 http://windows-zheufoa/ServiceModelSamples/service.svc 的  HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参阅服务器日志。 

我的开发环境是.net2008,framwork3.5,windows server 2008 
如果在浏览器地址栏输入http://localhost/servicemodelsamples/service.svc是可以看到"已创建服务"页面的。 

到底什么原因造成上述错误,如何解决? --------------------编程问答-------------------- up --------------------编程问答--------------------
引用 1 楼 zhongjiekangping 的回复:
up

帮我顶,谢谢兄弟! --------------------编程问答-------------------- 没有遇到过友情帮顶  --------------------编程问答-------------------- <?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
  <system.web> 
    <compilation debug="true" /> 
  </system.web> 
  <system.serviceModel> 
    <services>
      <service behaviorConfiguration="WeatherServiceBehavior" name="Microsoft.ServiceModel.Samples.WeatherService">
        <endpoint address="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.IWeatherService">
          <identity>
            <dns value="172.16.81.71" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://172.16.81.71:8731/servicemodelsamples/service/WeatherService/" />
          </baseAddresses>
        </host>
      </service>
    </services> 
    <behaviors> 
      <serviceBehaviors> 
        <behavior name="WeatherServiceBehavior"> 
       
          <serviceMetadata httpGetEnabled="True"/> 
          
          <serviceDebug includeExceptionDetailInFaults="False" /> 
        </behavior> 
      </serviceBehaviors> 
    </behaviors> 
  </system.serviceModel> 
</configuration>  --------------------编程问答-------------------- <service name="Microsoft.ServiceModel.Samples.WeatherService" POST http://forum.csdn.net/PointForumviceBehavior"> 
这一句好像有问题,在我机子上编译通不过,我把你的WEB.config修改了一下,看看行不行,这样的问题我以前没遇见过
--------------------编程问答-------------------- wcf没用过
看下是不是服务器拒绝请求??
或者报错了? --------------------编程问答-------------------- 学习,帮顶! --------------------编程问答-------------------- 可能是实体类序列化出了问题 --------------------编程问答-------------------- 你是下载的微软的例子吧,基于web的调用,需要是webHttpBinding

<endpoint address ="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.IWeatherService">   --------------------编程问答-------------------- 这个问题我遇到过:
我的问题是在创建的wcf类的对外提供的方法体中漏了调用方法前面的对象,如:
public bool UpdateBusiness(ReportDefinitionInfo info)
        {
            try
            {
                return CBBLL.UpdateBusiness(info);
            }
            catch (Exception ex)
            {

                throw new FaultException<ExceptionDetail>(new ExceptionDetail(ex));
            }
        }
这一方法写成了如下的方法:
public bool UpdateBusiness(ReportDefinitionInfo info)
        {
            try
            {
                return UpdateBusiness(info);
            }
            catch (Exception ex)
            {

                throw new FaultException<ExceptionDetail>(new ExceptionDetail(ex));
            }
        }
由于某种原因,编译仍然可以,但是执行错误,错误提示如下(使用NUnit测试):
TestProject.WCF.testUpdateBusiness:
System.ServiceModel.CommunicationException : 接收对 http://192.168.1.189:8083/CustomBusiness 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参见服务器日志。
  ----> System.Net.WebException : 基础连接已经关闭: 接收时发生错误。
  ----> System.IO.IOException : 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。
  ----> System.Net.Sockets.SocketException : 远程主机强迫关闭了一个现有的连接。
补充:.NET技术 ,  Web Services
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,