0

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

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

网址为 http://cfplonbs2:8686/TradePortal的文档未被识别为已知文档类型。来自每种已知类型的错误消息可能会帮助您解决问题: - 来自“XML Schema”的报告是“无法识别文档格式(内容类型为 'text/html; charset=UTF-8')。”。- 来自“http://cfplonbs2:8686/TradePortal”的报告是“无法识别文档格式(内容类型为“text/html;charset=UTF-8”)。- 来自“DISCO 文档”的报告是“下载“http://localhost:8686/TradePortal?disco”时出错。”。- 无法连接到远程服务器 - 无法连接,因为目标机器主动拒绝它 127.0.0.1:8686 - 来自“WSDL 文档”的报告是“无法识别文档格式(内容类型为 'text/html ; 字符集=UTF-8').'。元数据包含无法解析的引用:“http://cfplonbs2:8686/TradePortal”。没有端点监听 http://cfplonbs2:8686/TradePortal可以接受该消息。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。远程服务器返回错误:(404) Not Found。如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

我感到困惑的是,当我使用 svcutil.exe 工具并手动生成代理时,我可以让代码工作,我对这种方法的问题是它不像 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>

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

4

1 回答 1

0

首先,开发后不需要“配置服务引用”。只更改web.configor中的地址点app.config

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

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

http://server:port/service?wsdl

或者

http://server:port/service/mex
于 2011-06-06T13:00:58.027 回答