0

我有一个 WCF 服务,使用托管在 Apache 2.2.15 中的 basicHttpBinding,在 CentOS 中使用 mod_mono。我在 /etc/httpd/conf/httpd.conf 的末尾添加了以下指令以启用 WCF 服务:

MonoServerPath default /usr/bin/mod-mono-server4
AddType application/x-asp-net .svc

当我尝试从 Windows 中的客户端调用服务中的操作时:

        BasicHttpBinding binding = new BasicHttpBinding();

    IService1 service1 = ChannelFactory<IService1>.CreateChannel(binding, new EndpointAddress(new Uri(`"http://ipaddress/svctest/Service1.svc"`)));

    string test= service1.GetData(1);

抛出以下异常:

ProtocolException 未处理:响应消息的内容类型 application/x-asp-net 与绑定的内容类型不匹配 (text/xml; charset=utf-8)。如果使用自定义编码器,请确保正确实现 IsContentTypeSupported 方法。响应的前 109 个字节是:'<%@ ServiceHost Language="C#" Debug="true" Service="svcfiletest.Service1" CodeBehind="Service1.svc.cs"% >

当我通过浏览器访问服务时,它会下载文件而不是显示服务描述。

当我使用svcutilhttp://ipaddress/svcutil/Service1.svc?wsdl 时,我收到以下消息:

url 处的文档http://ipaddress/svctest/Service1.svc未被识别为已知文档类型。来自每种已知类型的错误消息可能会帮助您解决问题: - 来自“XML 架构”的报告是“名称不能以 '%' 字符开头,十六进制值 0x25。第 1 行,位置 2。'。- 来自“WSDL 文档”的报告是“XML 文档 (1,2) 中存在错误。”。-名称不能以'%'字符开头,十六进制值0x25。第 1 行,位置 2。

似乎它从 Service1.svc 获取文本:

<%@ ServiceHost Language="C#" Debug="true" Service="svcfiletest.Service1" CodeBehind="Service1.svc.cs" %>

有什么帮助吗?

谢谢

4

1 回答 1

0

您是否也确实在您的某个地方加载了模块/etc/httpd/conf/httpd.conf

您需要Include /etc/apache2/mod_mono.conf(或将其放入包含在您的 config 目录中http.conf)和LoadModule mono_module /usr/lib/httpd/modules/mod_mono.so

请参阅http://www.mono-project.com/Mod_mono

我的设置 - 手动启动 mod-mono

我手动编译了 mod-mono,这是我的 mod_mono.conf:http://pastebin.com/qp8vxHQ7。您需要使用此设置手动启动 mod-mono-server。

我在 中签出了这个模块~/Sites/,apache 将其选为http://localhost/~Martin/.

~/Sites然后,我在这样的目录中启动了 mod-mono-server4 :

    mod-mono-server4 --port 9000 --applications /~martin/Service:Service --verbose

这工作正常。

我的设置 - 自动启动 mod-mono

还测试了另一种设置: http: //pastebin.com/tYWk3tC9。这让 apache 启动 mod-mono。

于 2012-11-21T17:32:04.237 回答