WCF - HTTP无法注册URL http:// +:80 /

时间:2011-03-04 17:50:26

标签: wcf web-services iis

我在Stackoverflow上的第一篇文章!

我正在尝试构建WCF服务时遇到一些问题,我需要一些帮助才能弄明白。

服务有两个部分,第一部分是一个非常简单的REST风格的Web服务,它充满了GET方法,这很好。

下一个区域是Pub / Sub模型,它基本上会在内部向订户推送来自第一个区域的特定调用方法的结果。为了合并这个,我正在监听两个端点,现在每次我在PubSub服务上调用一个方法时,我都会得到上面的错误。在搜索了互联网之后,我看到很多帖子说IIS默认使用端口80。

现在有两个问题:  我的服务是听以下基地址,与80无关 http://localhost:3526/TradePortalhttp://localhost:3526/TradePortal/Operations  我最好在IIS中托管这个

建议我将客户端基地址更改为不使用端口80,但是是在服务器端或客户端配置上设置的。

我对此解决方案感到有些困惑,我之前使用NetTCP作为绑定构建了一个pubsub模型。

有关如何解决这个问题的任何线索将不胜感激

服务器端配置:

<system.serviceModel>
    <services>
        <service behaviorConfiguration="Default" name="CFP_Web_Lib.TradePortal">
          <host>
            <baseAddresses>
              <add baseAddress="http://localhost:3526/TradePortal"/>
            </baseAddresses>
          </host>
            <endpoint address="" binding="webHttpBinding"
                 contract="CFP_Web_Lib.ITradePortal"
                      behaviorConfiguration="web"
                 />
          <endpoint address="Operations/" binding="wsDualHttpBinding"
               contract="CFP_Web_Lib.ITradeOperations"/>
               </service>
    </services>
<behaviors>
  <serviceBehaviors>
    <behavior name="Default">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>

    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
    </behavior>
    </endpointBehaviors>
</behaviors>
</system.serviceModel>

客户端代码(由VS2010自动生成)

<system.serviceModel>
    <bindings>
        <wsDualHttpBinding>
            <binding name="WSDualHttpBinding_ITradeOperations" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <reliableSession ordered="true" inactivityTimeout="00:10:00" />
                <security mode="Message">
                    <message clientCredentialType="Windows" negotiateServiceCredential="true" />
                </security>
            </binding>
        </wsDualHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:3526/TradePortal/Operations/"
            binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_ITradeOperations"
            contract="CFP_Web.ITradeOperations" name="WSDualHttpBinding_ITradeOperations">
            <identity>
                <userPrincipalName value="callison@cfpartners.local" />
            </identity>
        </endpoint>
    </client>
</system.serviceModel>

1 个答案:

答案 0 :(得分:1)

问题是客户端不是服务器。 WsDualHttpBinding使用两个连接 - 一个从客户端到服务器,一个从服务器到客户端(用于支持回调)。这就是它被称为双重的原因。允许incomming连接客户端暴露自己的服务器(回调实现)。此服务还必须具有一些地址和未使用的端口。如果您没有指定此地址,它将默认使用端口80,该端口很可能已被IIS使用。您必须在客户端更改此地址。使用绑定配置的clientBaseAddress属性。