具有不同来源或操作 URL 的操作合约
我们的第三方 API 提供两种不同的 Web 服务,但具有相同的方法、模型。尽管如此,它们仅在 URI 上有所不同(Web 服务路径、操作路径 [操作合同]。
因此我决定:
使用 VS 从他们的 wsdl 生成代码。
- < p>编辑命名空间以使用相同的名称空间并使其成为“通用”,而不使用服务引用,而是使用 Reference.cs 编辑的代码。
创建一个新的代理,它将处理要使用的服务的正确 URI(将 Reference.cs 包装在其中)。
现在,我遇到了“Method1”的问题,因为它们有不同的操作名称:
“服务器无法识别该值 HTTP 标头 SOAPAction: http://www.api.com/service/Method1"
我只是注意到它是正确的操作名称是: http://www.api.com/service1/Method1
现在的问题是,是否有任何配置或行为可以用来更正每个方法的操作名称 请
或者只要他们继续为每个 API 实现添加合约,我也应该继续为每个服务添加合约,并且只使用 ChannelFactory 来实现这一点,
帮忙,谢谢。
Our third party API provides two different web services but have identical methods, models. Nevertheless they only differ on URIs (Web Service Path, Action Path [Operation Contract].
So I have decided to:
Generate the code from their wsdl using VS.
Edit the namespacing to use the same and to be "Common" and not use the service reference instead i use the Reference.cs edited code.
Create a new proxy that will handle the correct URI of the service to use (wrapped the Reference.cs inside of it).
Now, I having an issue with the "Method1", because they have different Action Name. Having an exception of:
"Server did not recognize the value of
HTTP Header SOAPAction:
http://www.api.com/service/Method1"
I just notice that it the correct action name is: http://www.api.com/service1/Method1
The question now is, is there any configuration or behavior that i can use to correct the action name for each method for each service?
Or as long as they keep on adding contracts for each implementation of the API, i should also keep on adding the contracts for each, and just use the ChannelFactory for this?
Please help, thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当遇到同样的问题时,我最终直接使用了 ChannelFactory
在我的实现中,我有一个基本接口,其中包含 2 个 API 的所有常用方法。然后,我有 2 个独立的接口 - 每个第 3 方 API 版本各一个 - 它继承自基本接口并添加在两个实现之间有所不同的方法和
[OperationContract]
属性。实例化
ChannelFactory
时,我使用了其中一个子接口。帮助保持消费者代码的整洁和可维护I ended up directly using the
ChannelFactory
when faced with the same problemIn my implementation, I had a base interface that had all the common methods to the 2 APIs. Then I had 2 seperate intefaces - one for each 3-rd party API version - that inherits from the base interface and adds methods and
[OperationContract]
attributes that varied between the two implementations.When instantianting
ChannelFactory<>
I used one of the child interfaces. Helped to keep the consumer code clean and maintainable