我正在尝试使用mono 2.10.8在CentOS上托管WCF服务,并将其作为REST或SOAP服务器进行访问。
我在包含web.config的文件夹中使用mod-mono-server-4启动了一个应用程序:
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="WebBehavior" name="Services.Hello">
<clear/>
<endpoint address="http://DOMAIN/service" behaviorConfiguration="HelloBehavior" binding="webHttpBinding" contract="Services.IHello" />
<endpoint address="http://DOMAIN/web" binding="basicHttpBinding" bindingConfiguration="" contract="Services.IHello" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="HelloBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="WebBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
如果我现在调用DOMAIN/web?wsdl
或DOMAIN/service/hello
(/hello
是IHello中方法的WebGetAttribute的UriTemplate)我只得到404:
&#39; /&#39;中的服务器错误应用
无法找到资源。
我还有一个Service.svc
文件包含:
如果我致电DOMAIN/Service.svc/hello
,我会收到SOAP错误:
请求消息包含目标&#39; http://DOMAIN/Service.svc/hello'采取行动&#39;&#39;在此服务合同中无法访问
如果我在服务器上启动控制台应用程序,执行以下操作:
WebServiceHost sh = new WebServiceHost(typeof(Hello), new Uri("http://localhost:681/service"));
sh.Open();
我可以在端口680上访问该服务,因此mono应该能够运行该服务,但我需要它与mod_mono一起运行(在端口80上)。
我需要以不同方式配置什么?
最后,我试图主持一个SyndicationFeed来提供RSS / Atom-Feeds。
答案 0 :(得分:0)
我找到了解决方法让它运行ATM:
创建一个普通的* .asmx-WebService并创建一个类似的方法:
[WebMethod]
[SoapDocumentMethod(ParameterStyle=SoapParameterStyle.Bare)]
public XmlDocument Feed()
{
SyndicationFeed feed = new SyndicationFeed();
//Fill the feed...
Atom10FeedFormatter atom = new Atom10FeedFormatter(feed);
StringBuilder result = new StringBuilder();
XmlWriter writer = XmlWriter.Create(result);
atom.WriteTo(writer);
writer.Flush();
XmlDocument doc = new XmlDocument();
doc.LoadXml(result.ToString());
return doc;
}
然后,您可以DOMAIN/Service.asmx/Feed
访问Feed。