日期:2014-05-17  浏览次数:20846 次

调用发布在iis上wcf的问题
已经有一个wcf部署在IIS上,浏览器访问:http://www.xxxdemo.com/GetData.svc 

已创建服务。

若要测试此服务,需要创建一个客户端,并将其用于调用该服务。可以使用下列语法,从命令行中使用 svcutil.exe 工具来进行此操作:
svcutil.exe http://xxxdemo/GetData.svc?wsdl

这将生成一个配置文件和一个包含客户端类的代码文件。请将这两个文件添加到客户端应用程序,并使用生成的客户端类来调用服务。例如:
...

点击“http://xxxdemo/GetData.svc?wsdl”会出现“网络无法访问或DNS解析错误”,如果手动在浏览器中输入“http://www.xxxdemo.com/GetData.svc?wsdl”就可以正常访问。

添加服务引用的时候,会出现如下错误信息:

URI http://www.xxxdemo.com/GetData.svc 处的文档未被识别为已知的文档类型。
来自各已知类型的错误信息可能有助于修复该问题:
- 来自“XML 架构”的报告是“无法识别此文档格式(内容类型为“text/html; charset=UTF-8”)。”。
- 来自“http://www.xxxdemo.com/GetData.svc”的报告是“无法识别此文档格式(内容类型为“text/html; charset=UTF-8”)。”。
- 来自“DISCO 文档”的报告是“下载“http://xxxdemo/GetData.svc?disco”时出错。”。
- 未能解析此远程名称: 'xxxdemo'
- 来自“WSDL 文档”的报告是“无法识别此文档格式(内容类型为“text/html; charset=UTF-8”)。”。
元数据包含无法解析的引用:“http://www.xxxdemo.com/GetData.svc”。
元数据包含无法解析的引用:“http://www.xxxdemo.com/GetData.svc”。
如果该服务已在当前解决方案中定义,请尝试生成该解决方案,然后再次添加服务引用。

请问这可能是什么原因导致的,要怎么修改。

------解决方案--------------------
通过域名访问么? 想实现 http://xxxdemo/GetData.svc?wsdl 就在你的 
C:\Windows\System32\drivers\etc\hosts 文件里添加一行, 
就把域名劫持为你定义的ip了
如:
192.168.1.100 server

第2个问题是不是你配置的问题?这是我们的配置,对比下:
XML code


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
          <serviceMetadata httpGetEnabled="true" />
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true">
      <serviceActivations>
          <add relativeAddress="PersonService.svc" service="PersonsBLL.Persons" />
      </serviceActivations>
    </serviceHostingEnvironment>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
</configuration>