2

我有一个使用 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 命名空间”来创建我们的命名空间。

我们的应用程序已经投入生产(在 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(如果存在)。”</p>

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

我们一直在网上寻找答案,但没有发现任何东西。有人知道为什么这可以在我们的 Windows 7 工作站上工作,但不能在我们的 Windows 2008 服务器上工作吗?

任何帮助是极大的赞赏!凯文

4

2 回答 2

1

当您在 IIS 中托管 WCF 服务时,您不会在地址中指定绝对 url。您应该使用 .svc 文件的相对 url。基本 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 应用程序。

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

堆栈溢出链接

多端点

于 2012-10-18T05:31:35.083 回答
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 config 中的消息请求长度,错误就消失了。

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

<httpRuntime maxRequestLength="32768" />

然后我在配置部分中添加了这个部分

<system.webServer>
 <security>
  <requestFiltering>
   <requestLimits maxAllowedContentLength="32000000" />
  </requestFiltering>
 </security>
</system.webServer>

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

于 2014-04-04T17:17:07.760 回答