我在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中添加服务引用时,我得到以下异常:
异常
该文件已被理解,但无法处理。
http://localhost:8008/MyAppServiceutv/Integration?xsd=xsd0
”时出错。元数据包含无法解析的引用:“http://MyComputer:8008/MyAppServiceutv/Integration?wsdl
”。
内容类型application / soap + xml;服务http://MyComputer:8008/MyAppServiceutv/Integration?wsdl
不支持charset = utf-8。客户端和服务绑定可能不匹配。
远程服务器返回错误:(415)无法处理消息,因为内容类型为'application / soap + xml; charset = utf-8'不是预期的类型'text / xml;字符集= UTF-8' ..
如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。
迁移到开发环境
将服务移动到开发计算机时,一切都很好吗?为什么我会在一个环境中遇到上述问题?这可能是由于强大的安全限制吗?
答案 0 :(得分: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可以生成单个文件WSDL,这也可以解决您的问题。但总的来说,在我看来,在处理WSDL代理生成时WCF 4.0已经崩溃了。