You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:25:51