我有一个使用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服务器?
非常感谢任何帮助! 凯文
答案 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应用程序。
如果它没有帮助请按照这些链接,希望它会有用。
答案 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>
因此,我建议您启用跟踪,然后查看跟踪以确定错误。