我正在WCF中构建一个新的SOAP API,以替换已与客户端服务器建立的通信中的旧服务。这里的渔获物是:我不被允许编辑客户端目前的API(…
的 最终的解决方案是设置OperationFormatStyle [ServiceContract] 到'Rpc' 强>
[ServiceContract]
[ServiceContract(Namespace = "http://www.example.com/Service"), XmlSerializerFormat(Style = OperationFormatStyle.Rpc)]
似乎在尝试与第三方服务建立连接时,您需要使用相同的名称和名称空间以及匹配相同的消息结构。由于我正在模仿RPC结构的SOAP接口,因此我不允许使用MessageContracts,但我需要指定发送DataContracts的消息的结构。通过将style参数设置为RPC,wsdl中的DataContracts(ComplexTypes)将在消息标记中正确格式化。如果没有将样式设置为Rpc,则我的操作无法识别任何输入类型参数,并且当我将DataContract设置为MessageContract时,输入类型已被识别,但在调用操作时从未填充传递的值。请注意,这只是基于对代码进行试验的我的推论,它现在工作的真正原因可能完全不同,但对我来说最重要的是 - 它正在工作!
我在wsdl中的message元素也是自动格式化的,其中包含错误的名称和命名空间参数。 在我的情况下,名称包括我的项目的名称空间,服务名称和具体的操作名称,而我需要它只是操作名称。
我还专注于只生成一个没有任何包含的大wsdl文件,因为第三方服务期望这种格式。目前它似乎没有给我任何问题,但我可能会在后来的过程中遇到问题。
我在这个问题上的解决方案是通过NuGet实现WCFExtrasPlus包。在Visual Studio中,您可以通过“项目”面板菜单打开NuGet包管理器,然后搜索WCFExtrasPlus包并进行安装。
要将项目设置为使用我遵循以下注意事项的包:
http://george2giga.com/development/wcf-merge-wsdl-in-a-single-file/