WCF服务使用mod_mono
本文关键字:mono mod 服务 WCF | 更新日期: 2023-09-27 18:21:26
我正试图使用mono 2.10.8在CentOS上托管WCF服务,并将其作为REST或SOAP服务器进行访问。
我在包含web.config的文件夹中使用mod-moon-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:
"/"应用程序中的服务器错误
找不到资源。
我还有一个Service.svc
文件,其中包含:
如果我调用DOMAIN/Service.svc/hello
,我会得到一个SOAP错误:
请求消息具有目标"http://DOMAIN/Service.svc/hello具有操作"的",该操作在此服务合同中不可访问
如果我在服务器上启动控制台应用程序,执行以下操作:
WebServiceHost sh = new WebServiceHost(typeof(Hello), new Uri("http://localhost:681/service"));
sh.Open();
我可以在端口680上访问该服务,因此mono应该能够运行该服务,但我需要它与mod_mono(在端口80上)一起运行。
我需要以不同的方式配置什么
最后,我尝试托管一个SyndicationFeed来提供RSS/Atom Feed。
我找到了一个让它运行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
上的提要。