我有一个普通的第三方SOAP服务,包含WSDL和东西。问题是 - 它只接受GET请求。如何在c#中访问它?
当我通过Add Service Reference
将该服务添加到VS并尝试照常使用时:
var service = new BaseSvcClient(
new BasicHttpContextBinding(),
new EndpointAddress("http://some.internal.ip/WebServices/Base.svc"));
var ver = service.Version();
我看到(通过fiddler)它实际上发送了POST请求,并且web服务响应时出现Endpoint not found
错误消息。
如果我只是在浏览器中点击http://some.internal.ip/WebServices/Base.svc/Version
,则会返回正确的xml。
我可以使用WebClient,但是我必须手动构建所有GET请求,这看起来不太好。 还有其他解决方案吗?
答案 0 :(得分:1)
我找到了answer给了我很多帮助。
基本上,如果我为客户端使用自动生成的接口,请使用[WebGet]
修饰方法并使用
var cf = new WebChannelFactory<IBaseSvc2>(new Uri("..."));
var service = cf.CreateChannel();
var result = service.Version();
这一切都运作良好。这不是一个完美的解决方案,因为更改不会自动获取,所以可能还有其他解决方案吗?
P.S。现在,Web服务的界面就像:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName = "BaseService.IBaseSvc")]
public interface IBaseSvc2
{
[System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IBaseSvc/Version", ReplyAction = "http://tempuri.org/IBaseSvc/VersionResponse")]
[WebGet]
VersionInformation Version();
}
答案 1 :(得分:0)
您可以通过在配置文件中添加协议来实现它
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>