WCF代理生成问题

时间:2011-06-06 12:54:47

标签: wcf visual-studio-2010 proxy-classes

我在VS2010中遇到代理生成问题。

我已经使用WCF和Pub / Sub模式创建了一个客户端/服务器应用程序。该服务在本地运行良好,但我可以在服务器上启动服务,并可以通过我的浏览器通过相关网址访问它,我不能“配置服务参考”,而不会得到以下错误:

  

网址上的文件   http://cfplonbs2:8686/TradePortal是   不被认可为已知文件   类型。每个错误消息   已知类型可以帮助您修复   问题:    - 来自'XML Schema'的报告是'文件格式无法识别(   内容类型是'text / html;   字符集= UTF-8 ')。'。    - 来自'http:// cfplonbs2:8686 / TradePortal'的报告是   '无法识别文档格式   (内容类型为'text / html;   字符集= UTF-8 ')。'。    - 来自'DISCO Document'的报告是'下载时出错   的 'http://本地主机:8686 / TradePortal迪斯科''。     - 无法连接到远程服务器      - 无法建立连接,因为目标计算机是主动的   拒绝它127.0.0.1:8686    - 来自'WSDL文档'的报告是'文件格式未被识别(   内容类型是'text / html;   字符集= UTF-8 ')。'。元数据包含一个   无法解决的参考:   的 'http:// cfplonbs2:8686 / TradePortal'。   没有端点在听   http://cfplonbs2:8686/TradePortal那个   可以接受这个消息。这是   通常由不正确的地址引起   或SOAP动作。请参阅InnerException,if   目前,了解更多详情。遥控器   服务器返回错误:(404)不是   发现。如果定义了服务   目前的解决方案,尝试建立   解决方案并添加服务   再次参考。

我觉得令人困惑的是,当我使用svcutil.exe工具并手动生成代理时,我可以使代码工作,我的问题是这个appproach不像VS2010代理那样干净,而且他们没有实现iNotifyPropertyChanged接口。

这可能是阻止访问的服务器上的防火墙设置吗?在本地生成的代理中是否有更改我绑定的机器名的快捷方式?

服务器端的app.config是:

 <services>
      <service behaviorConfiguration="Default" name="CFP_Web_Lib.TradePortal">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8686/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>
    <bindings>
      <wsDualHttpBinding>
        <binding name="WSDualHttpBinding_IPubSubService" 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"
              algorithmSuite="Default" />
          </security>
        </binding>
      </wsDualHttpBinding>
      <mexHttpBinding>
        <binding name="NewBinding0" />
      </mexHttpBinding>
    </bindings>

关于我哪里出错的任何想法?

1 个答案:

答案 0 :(得分:0)

首先,开发后不需要“配置服务参考”。仅更改web.configapp.config

中的地址点

其次,检查服务器部分是否配置了mex端点,否则您将无法创建其他客户端。

最后,当您尝试访问服务的WSDL时,请使用以下两种表示法之一:

http://server:port/service?wsdl

http://server:port/service/mex