http://上没有端点监听

时间:2012-10-17 22:10:39

标签: wcf .net-4.0

我有一个使用WCF服务的Windows窗体应用程序。我们的应用程序使用我们的一个WCF服务向运行客户端的特定用户发送消息,因此每次向用户发送消息时都会动态构建回调“http:”字符串。它包括记录当前用户的服务器IP地址和端口(126.221.97.105:701),用户ID(56281)和客户端GUID(7392d27a-e4a0-42e2-89a3-adc332e28934)。因此,典型的回调“http:”字符串如下所示:

http://xxx.xxx.xx.xxx:701/CmesCns/CALLBACK/56281/7392d27a-e4a0-42e2-89a3-adc332e28934

我们的客户端上有一个http命名空间(http:// +:701 /),并且“Everyone”组与此命名空间绑定,并检查了所有访问权限(GenericAll,GenericExecute,GenericRead和GenericWrite)。我们使用“http namespace”来创建我们的命名空间。

我们的应用程序已经投入生产(在Windows Server 2003上)几年,一切正常。

我们最近将我们的应用程序转换为在Windows 2008服务器环境中运行。我们每个项目中的“目标框架”都设置为“.NET Framework 4.0”。我们的应用程序在我的Windows 7开发人员工作站上正常也就是说,我能够从WCF服务接收消息,但是当我将应用程序放到Windows 2008服务器上并尝试运行应用程序时,收到以下错误消息:

http://xxx.xxx.xx.xxx:701/CmesCns/CALLBACK/56281/7392d27a-e4a0-42e2-89a3-adc332e28934没有收听端点 那可以接受这个消息。这通常是由错误的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。“

http命名空间(http:// +:701 /)存在于我的开发人员工作站和Windows 2008服务器上。 “Everyone”组在我的Windows 7盒子和Windows 2008服务器上绑定了命名空间,并且检查了所有访问权限(GenericAll,GenericExecute,GenericRead和GenericWrite)。

我们一直在网上搜索答案但没有发现任何问题。是否有人对我们的Windows 7工作站上的原因有什么看法,而不是我们的Windows 2008服务器?

非常感谢任何帮助! 凯文

2 个答案:

答案 0 :(得分:1)

在IIS中托管WCF服务时,不要在地址中指定绝对URL。您应该使用.svc文件的相对URL。基本网址将由托管网站确定。

    <service name="WebService.Receptor">
<endpoint
    address="/WS.svc"
    binding="wsHttpBinding"
    contract="IMyContract"
 />

并且在客户端上,根据IIS的配置方式,您应该明确指定完整地址:

<client>
<endpoint 
    name="Receptor"
    address="http://MyServer:8000/WS.svc"
    binding="wsHttpBinding"
    contract="IMyContract"
/>

这假设您已在IIS中配置了一个侦听8000端口的站点,并且您已在此站点内托管了WCF应用程序。

如果它没有帮助请按照这些链接,希望它会有用。

Stack overflow link

Multiple Endpoint

答案 1 :(得分:1)

通常,此错误是因为服务器上没有与客户端请求匹配的端点(地址,服务或身份验证不同)。 但是,在我的情况下,我有完全相同的错误,并不是由于任何这些事情。

当我在IIS上启用跟踪并使用SvcTraceViewer.exe(包含在Visual Studio中)查看svclog跟踪时,实际内部错误为“超出最大请求长度。”

我的客户正在通过该服务上传图片。而且我猜图像太大了。

要启用跟踪,我将其添加到配置部分:

<system.diagnostics>
  <sources>
        <source name="System.ServiceModel" 
                switchValue="All"
                propagateActivity="true">
        <listeners>
           <add name="traceListener" 
               type="System.Diagnostics.XmlWriterTraceListener" 
               initializeData= "c:\log\Traces.svclog" />
        </listeners>
     </source>
  </sources>

为了解决这个错误,我在web配置中增加了消息请求长度,错误就消失了。

为此,在web.config的system.websection中添加了以下行:

<httpRuntime maxRequestLength="32768" />

然后我在配置部分

中添加了这一部分
<system.webServer>
 <security>
  <requestFiltering>
   <requestLimits maxAllowedContentLength="32000000" />
  </requestFiltering>
 </security>
</system.webServer>

因此,我建议您启用跟踪,然后查看跟踪以确定错误。