0

我一直在尝试使用 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>

尽管如上所述,这显然行不通。

我还尝试了这个相关的 Stack Overflow 问题中提供的解决方案,但无济于事

我希望能够运行示例(希望将来能够运行我自己的服务)。我应该采取什么步骤来实现这一点?我几乎没有 WCF 或服务器开发的经验,因此我完全有可能在设置服务时犯了一个“微不足道”的错误。

最后,我在 Windows 8 Pro 中使用 VS 2012,如果这会影响任何事情。我在调试模式下运行了示例。

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

4

2 回答 2

1

对我有用的解决方案是更改服务和客户端之间的加载顺序。微软显然没有将它们设置为默认正确加载。

为了进行修复,请在“解决方案资源管理器”中选择服务库,右键单击并选择“设置为启动项目”选项。现在应该可以通过 Windows 调试器运行应用程序了。

在这种情况下,问题的根源似乎是客户端会运行,尝试在绑定地址使用服务,然后在收到 html 响应而不是所需的 xml 时吓坏了。html 响应只是由浏览器发送,因为服务(如果它已被初始化)将等待接收来自客户端的查询。

于 2013-06-10T09:19:33.427 回答
0

在服务部分,您收到错误

无法从程序集“System.ServiceModel,Version=3.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”加载类型“System.ServiceModel.Activation.HttpModule”。

您是对的,该服务返回的是 html 格式的内容,而不是 xml 格式的数据。因为它返回一个 HTML 页面,其中包含在加载过程中遇到的错误。

尝试在浏览器中打开端点(*.svc 文件),它会最明显地显示黄色的 asp 错误页面,在那里您可能会找到有关您的服务无法启动的更多信息。

于 2013-06-05T09:39:41.087 回答