我在我的 MVC 应用程序中创建了一个 Web 服务。所有合约都使用相同的命名空间。AssemblyInfo.cs
还映射ContractNameSpace
with ClrNameSpace
。
生成的 WSDL 没有定义我的合同类型。
这是我使用 ServiceStack 的第二个项目。然而,结果是不同的。为了让 ServiceStack 正确生成 WSDL,合约是否必须驻留在不同的程序集中?
我在我的 MVC 应用程序中创建了一个 Web 服务。所有合约都使用相同的命名空间。AssemblyInfo.cs
还映射ContractNameSpace
with ClrNameSpace
。
生成的 WSDL 没有定义我的合同类型。
这是我使用 ServiceStack 的第二个项目。然而,结果是不同的。为了让 ServiceStack 正确生成 WSDL,合约是否必须驻留在不同的程序集中?
该问题已在最新的 ServiceStack 版本中得到修复:https ://github.com/ServiceStack/ServiceStack/issues/306
确保您没有使用像 WCFStorm 这样的狡猾工具。即使使用当前的 ServiceStack 版本,我也遇到了同样的问题。我切换到soapUI,一切正常。
WSDL 和 XSD 中的类型由您的服务中使用的请求 + 响应 DTO 确定,即它们需要被您的服务使用才能包含在内。
还要确保通读SOAP 限制以确保没有遗漏任何内容。
如果您仍然认为这是一个问题,请通过显示问题的 gist 或 pull-request 提交一个独立的项目。
您的问题与我遇到的问题相同,因此我将在此处发布我的解决方案:
我已经下载了源代码并自己进行了一些调查。我不确定此更改有多近,但似乎为了将您的 DTO 和响应对象包含在 wsdl 中,您需要添加一个查询字符串,如“?includeAllTypes = true”。
我还使用了 ServiceStack BasicAuthProvider 设置,它导致 AssignRoles 和 UnAssignRoles 自动添加到服务中。这些调用的请求和响应对象仍然无法进入 wsdl 并导致“添加服务引用”失败。幸运的是,我们没有使用它们,所以如果我能找到另一个配置设置来删除它们,它们应该都能正常工作。