如何通过GET方法使用Web服务?

时间:2012-10-03 08:46:29

标签: c# web-services

我有一个普通的第三方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请求,这看起来不太好。 还有其他解决方案吗?

2 个答案:

答案 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>