使用Spyne在Django开发SOAP服务遇资源未找到错误求助
解决Django中Spyne SOAP服务的ResourceNotFound错误
我来帮你搞定这个Spyne在Django里的SOAP服务错误!这个<faultcode>soap11env:Client.ResourceNotFound</faultcode>的核心问题很明确:你的Spyne应用命名空间和Django中挂载服务的URL路径不匹配——错误信息里系统在找spyne.examples.django,但你代码里给Application设置的命名空间是spyne.examples.hello.http,两者对不上,导致服务找不到对应的资源。
下面是具体的修复步骤:
1. 修正Spyne Application的命名空间
首先把Application的第二个参数(命名空间)改成和你项目匹配的标识,比如对应你的Django应用名Hello_world,改成hello_world.soap就很合适,别再用示例里的陌生命名了:
from spyne import Application, rpc, ServiceBase, Unicode from spyne.protocol.soap import Soap11 from spyne.server.django import DjangoApplication class HelloWorldService(ServiceBase): @rpc(Unicode, _returns=Unicode) def say_hello(self, ctx, name): return f"Hello, {name}!" # 修正命名空间,和你的应用/服务路径对应 app = Application( [HelloWorldService], 'hello_world.soap', # 这里改成贴合你项目的命名空间 in_protocol=Soap11(), out_protocol=Soap11(), )
另外注意:你之前代码里混用了HttpRpc()和Soap11()协议,这很容易导致协议兼容问题,建议统一用Soap11()作为输入输出协议。
2. 正确配置Django的urls.py
确保你在Hello_world应用的urls.py(或者项目根路由文件)里,把Spyne的视图挂载到明确的路径上:
from django.urls import path from .views import app # 导入你定义好的Spyne Application urlpatterns = [ # 把SOAP服务挂载到/soap/路径下 path('soap/', DjangoApplication(app), name='soap_service'), ]
3. 验证请求路径
测试的时候,要确保请求的URL是http://你的域名/hello_world/soap/(根据你的Django项目路由前缀调整),并且SOAP请求的目标命名空间要和你Application里设置的hello_world.soap完全一致。
额外检查项
- 确认
Hello_world已经添加到项目settings.py的INSTALLED_APPS列表里,不然Django找不到这个应用的路由。
按照这些步骤调整后,你的SOAP服务应该就能正常响应请求了。
内容的提问来源于stack exchange,提问作者fatemeh nikoonezhad
相关产品推荐
相关产品推荐

