WCF示例安装/ GettingStarted绑定内容类型问题

时间:2013-06-04 10:35:29

标签: c# asp.net .net wcf visual-studio-2012

我一直在尝试使用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,如果这会影响任何事情。我在调试模式下运行了示例。

如有必要,我可以从服务中发布示例代码。

2 个答案:

答案 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响应只是由浏览器发送的,其中服务(如果它已被初始化)将等待从客户端接收查询。