Spring.NET WebServiceExporter和MVC3

时间:2011-10-02 21:00:51

标签: asp.net-mvc web-services spring.net

我正在尝试使用一个简单的Spring.NET Web服务使用MVC3但是虽然没有错误,我可以从日志中看到Spring正在部署它,但我无法为我的Web服务提供正确的URL一点都不

我已经正确地遵循了示例(Spring.NET附带)。我的不同之处在于我没有对我的服务进行任何AOP编织。据我所知,它应该有用......但不是。

这是我的服务类(非常基础)

public interface IHelloService
{
    string SayHello();
}

public class HelloService : IHelloService
{
    public String SayHello()
    {
        return "Hello";
    }
}

这是我的配置

<!-- Web services -->
<object id="HelloService" type="Munch.Service.Web.HelloService, Munch.Service"/>

<!-- Exports contact service (weaved or not) as a web service. -->
<object id="HelloWebService" type="Spring.Web.Services.WebServiceExporter, Spring.Web">
  <property name="TargetName" value="HelloService"/>
  <property name="Namespace" value="http://Munch.Service.Web/HelloService"/>
  <property name="Description" value="Hello Web Services"/>
  <property name="TypeAttributes">
    <list>
      <object type="System.Web.Script.Services.ScriptServiceAttribute, System.Web.Extensions"/>
    </list>
  </property>
</object>

我希望能够以类似http://localhost:8080/Munch/HelloWebService.asmx之类的方式访问我的网络服务,但对于我尝试的任何变体都不会感到高兴。有没有办法找出已部署的Web服务(可能是某些调试页面)?

Spring附带的示例确实有效(!)所以我知道可以在我的机器上运行一个有效的Spring WS,我只是看不出我出错的地方。

1 个答案:

答案 0 :(得分:1)

我可以使用spring.net 1.3.2附带的spring.net HelloService发布您的Spring.Mvc3QuickStart

这些是我必须做的事情才能让它发挥作用:

  1. 将服务配置添加到spring.net mvc context
  2. 将所有asmx资源添加到routes.IgnoreRoute
  3. Spring.Web.Services.WebServiceHandlerFactory添加Spring.Web,因为bbaia对您的问题发表了评论
  4. 我怀疑您忘记将所有asmx资源添加到routes.IgnoreRoute

    步骤一步

    从Spring.Net 1.3.2附带的Spring.Mvc3QuickStart示例应用程序开始。

    从您的问题中引用包含HelloService类的项目。

    将文件~/Config/services.xml添加到项目中,其中包含您的服务配置:

    <object id="HelloService" type="Munch.Service.Web.HelloService, Munch.Service"/>
    
    <object id="HelloWebService" type="Spring.Web.Services.WebServiceExporter, Spring.Web">
      <property name="TargetName" value="HelloService"/>
      <property name="Namespace" value="http://Munch.Service.Web/HelloService"/>
      <property name="Description" value="Hello Web Services"/>
      <property name="TypeAttributes">
        <list>
          <object type="System.Web.Script.Services.ScriptServiceAttribute, System.Web.Extensions"/>
        </list>
      </property>
    </object>
    

    在Global.asax中,添加

    routes.IgnoreRoute("{resource}.asmx/{*pathInfo}");
    

    RegisterRoutes。这将告诉asp.net mvc处理程序单独将请求留给asmx资源。

    在web.config中,添加以下http处理程序:

    <system.web>
      <!-- ... -->
      <httpHandlers>
        <add verb="*" path="*.asmx" type="Spring.Web.Services.WebServiceHandlerFactory, Spring.Web" />
      </httpHandlers>
      <!-- ... -->
    

    在web.config中,将您的服务配置添加到spring上下文:

    <spring>
      <context>
        <resource uri="file://~/Config/controllers.xml" />
        <resource uri="file://~/Config/services.xml" />
      </context>
    </spring>
    

    从Visual Studio运行应用程序时,您应该能够在http://localhost:12345/HelloWebService.asmx查看服务(用您的dev端口替换12345)。

    备注

    我对asp.net-mvc不太熟悉,所以可能有比我建议更好的配置方法。