我一直在尝试使用MSDN here提供的WCF示例来感受使用WCF。不幸的是,我甚至无法运行最基本的WCF示例,它(在执行安装步骤之后)可以在“C:\ WF_WCF_Samples \ WCF \ Basic \ GettingStarted”中找到。我没有修改WCF安装程序生成的示例代码。
当我运行该服务时,我收到以下错误:
An unhandled exception of type 'System.ServiceModel.ProtocolException' occurred in mscorlib.dll
Additional information: The content type text/html; charset=utf-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were: '<!DOCTYPE html>
<html>
<head>
<title>Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.</title>
<meta name="viewport" content="width=device-width" />
<style>
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable {'.
如果我正确解释它,这意味着该服务返回html格式的内容而不是xml格式的数据。
在互联网上搜索后,我发现了一个堆栈溢出线程(现在无法找到链接),该线程表示该问题可能与用户“网络服务”(主持服务)缺乏的事实有关。非常小的权限,不能修改“C:\ inetpub \ wwwroot \”文件夹。当我尝试更改权限时,遇到以下错误:
An error occured while applying security information to:
C:\inetpub\wwwroot\msmq
Failed to enumerate objects in the container. Access is denied.
我还尝试通过开发人员命令提示符(使用我找到的命令)通过以下方式更改权限:
C:\Program Files (x86)\Microsoft Visual Studio 11.0>icacls %systemdrive%\inetpub
/grant %userdomain%\%username%:(OI)(CI)(F) /grant %userdomain%\%username%:F
C:\inetpub: Access is denied.
Successfully processed 0 files; Failed processing 1 files
C:\Program Files (x86)\Microsoft Visual Studio 11.0>
虽然如上所示,但显然不起作用。
我也尝试了this related Stack Overflow question, but to no avail中提供的解决方案。
我希望能够运行样本(希望将来我自己的服务)。我应该采取哪些措施来实现这种可能性?我几乎没有使用WCF或服务器开发的经验,所以我完全有可能在设置服务时犯了“微不足道”的错误。
最后,我正在使用Windows 8 Pro中的VS 2012,如果这会影响任何事情。我在调试模式下运行了示例。
如有必要,我可以从服务中发布示例代码。
答案 0 :(得分:1)
在服务部分,您收到错误
无法从程序集'System.ServiceModel,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'加载类型'System.ServiceModel.Activation.HttpModule'。
你是对的,该服务返回的是html格式的内容而不是xml格式的数据。因为它返回一个HTML页面,其中包含在加载过程中遇到的错误。
尝试在浏览器中打开端点(* .svc文件),它最挑剔地显示黄色的asp错误页面,在那里你可以找到更多关于你的服务无法启动的信息。
答案 1 :(得分:1)
对我有用的解决方案是更改服务和客户端之间的加载顺序。显然,Microsoft默认情况下不会将它们设置为正确加载。
要进行修复,请在“解决方案资源管理器”中选择服务库,右键单击并选择“设置为启动项目”选项。现在应该可以通过Windows调试器运行应用程序。
在这种情况下,问题的根源似乎是客户端会运行,尝试在绑定地址处使用服务,然后在收到html响应而不是所需的xml时吓坏了。 html响应只是由浏览器发送的,其中服务(如果它已被初始化)将等待从客户端接收查询。