3

我之前在尝试从远程计算机访问 WCF 服务时问了一个问题来解决 SecurityNegotiationException。由于 ValtasarIII 的回答,该异常已得到解决。

现在我有一个不同的问题。我在服务器上托管了我的服务,并希望使用客户端应用程序连接到它。但是,当我尝试从客户端应用程序订阅服务时,什么也没有发生,最后我得到了异常:

The open operation did not complete within the allotted timeout of 00:00:59.9939996. The time allotted to this operation may have been a portion of a longer timeout.

(如有必要,我可以共享堆栈跟踪)

虽然当我尝试测试服务是否正在运行时,我可以通过客户端机器上的浏览器成功访问它。

这是我的配置:

服务 - web.config

<configuration>
  <system.serviceModel>
    <bindings>
      <wsDualHttpBinding>
        <binding name="wsHttpDual">
          <security mode="None">
            <message clientCredentialType="None" algorithmSuite="Default" />
          </security>
        </binding>
      </wsDualHttpBinding>
    </bindings>
    <protocolMapping>
      <add scheme="http" binding="wsDualHttpBinding" bindingConfiguration="wsHttpDual"/>
    </protocolMapping>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

客户端 - app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsDualHttpBinding>
        <binding name="WSDualHttpBinding_ISampleContract" clientBaseAddress="http://95.138.188.232:8000/myClient/">
          <!--<security mode="Message">
            <message clientCredentialType="Windows" algorithmSuite="Default" />
          </security>-->
          <security mode="None">
            <message clientCredentialType="None" algorithmSuite="Default" />
          </security>
        </binding>
      </wsDualHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://95.138.188.232/autofxtools/service.svc"
          binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_ISampleContract"
          contract="ISampleContract" name="WSDualHttpBinding_ISampleContract">
        <identity>
          <servicePrincipalName value="host/95.138.188.232" />
        </identity>
      </endpoint>

    </client>
  </system.serviceModel>
</configuration>

我一直在寻找解决方案,但对我没有任何帮助。服务配置似乎表明没有安全要求。但是,具有相同配置的客户端实际上与服务在同一台机器上工作,而不是在远程机器上工作。这是否意味着仍然存在 Windows 身份验证(根据 wsDualHttpBinding 的默认设置)?如果是这样,那么我哪里出错了?

希望能得到一些积极的反馈。

问候。

4

1 回答 1

2

这可能是防火墙问题。我假设您在 ISS 中托管服务 - 您确定相应的端口是开放的吗?当您尝试通过浏览器访问服务时会发生什么?

另外,我在一个德国论坛上读到以下内容:

Anscheinend tritt das Problem nur bei WsDualBinding auf, wenn der Port 80 belegt ist。Gibt wohl keine Möglichkeit den Port mit Hilfe von ClientBaseAdress zu ändern。Einzige Möglichkeit ist hier wohl netTcpBinding。

这在英语中的意思是:

显然,在端口 80 已被占用的情况下使用 WsDualBinding 时会出现此问题。似乎没有办法使用 ClientBaseAddress 更改端口。唯一的方法似乎是使用 netTcpBinding。

于 2012-12-19T08:15:42.200 回答