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?wsdlDOMAIN/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。

WCF服务使用mod_mono

我找到了一个让它运行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上的提要。