0

我有一个托管在 Windows 服务(Selfhost)中的简单 Webserivce(WCF)。服务的声明如下所示:

<service behaviorConfiguration="MyApp.ServiceImplementation.MyAppIntegration_Behavior" name="MyApp.ServiceImplementation.MyAppIntegration">
        <endpoint binding="basicHttpBinding" bindingConfiguration="BasicMyAppIntegration" bindingNamespace="MyApp.ServiceImplementation" contract="MyApp.ServiceContracts.IMyAppIntegration"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8008/MyAppServiceutv/Integration"/>
          </baseAddresses>
        </host>
      </service>

我可以用这个 URL 浏览 WSDL:

http://localhost:8008/MyAppServiceutv/Integration?wsdl

在 Visual Studio 2012 中添加服务引用时,出现此异常:

例外

该文件已被理解,但无法处理。

  • WSDL 文档包含无法解析的链接。
  • 下载“ ”时出错http://localhost:8008/MyAppServiceutv/Integration?xsd=xsd0
  • 无法连接到远程服务器

元数据包含无法解析的引用:“ http://MyComputer:8008/MyAppServiceutv/Integration?wsdl”。内容类型应用程序/soap+xml;charset=utf-8 不受 service 支持http://MyComputer:8008/MyAppServiceutv/Integration?wsdl。客户端和服务绑定可能不匹配。远程服务器返回错误:(415)无法处理消息,因为内容类型'application/soap+xml; charset=utf-8' 不是预期的类型 'text/xml; charset=utf-8'.. 如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

迁移到开发环境

将服务移至开发计算机时,一切正常吗?为什么我会在一个环境中遇到上述问题?这可能是由于严格的安全限制吗?

4

1 回答 1

0

听起来您的 VS2012 实例与您的服务主机无关。尝试像这样更改您的配置...

  <service behaviorConfiguration="MyApp.ServiceImplementation.MyAppIntegration_Behavior" name="MyApp.ServiceImplementation.MyAppIntegration">
    <endpoint binding="basicHttpBinding" bindingConfiguration="BasicMyAppIntegration" bindingNamespace="MyApp.ServiceImplementation" contract="MyApp.ServiceContracts.IMyAppIntegration"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://{my fully qualified domain name}:8008/MyAppServiceutv/Integration"/>
      </baseAddresses>
    </host>
  </service>

好的。现在我已经确认了这个问题……一个解释。.net 4.0 或更低版本 WCF 生成多文件 WSDL 文件。基本 WSDL 文件链接到各种文件。WDSL 文件中的链接使用绝对 URI 而不是相对 URI 链接到其他文件。因此,当您的 Visual Studio 尝试查找其他 WDSL 文件时,它无法在“localhost”上找到它。

使用 .net 4.5 WCF 可以生成 SINGLE FILE WSDL,这也将解决您的问题。但总的来说,我认为 WCF 4.0 在处理 WSDL 代理生成时被破坏了。

于 2013-05-15T15:50:33.747 回答