0

私はWSDLなどを備えた通常のサードパーティのSOAPサービスを持っています。問題は、GETリクエストのみを受け入れることです。C#でアクセスするにはどうすればよいですか?

When I add that service to VS via Add Service Reference and try to use it as usual:

var service = new BaseSvcClient(
                 new BasicHttpContextBinding(), 
                 new EndpointAddress("http://some.internal.ip/WebServices/Base.svc"));
var ver = service.Version();

I see (via fiddler) that it actually sends POST requests and web-service responds with Endpoint not found error message. If I simply hit http://some.internal.ip/WebServices/Base.svc/Version in a browser the proper xml is returned.

I can use WebClient, but then I have to construct all the GET requests manually, which doesn't look good. Are there other solutions?

4

2 に答える 2

1

私は私を大いに助けた答えを見つけました。基本的に、クライアント用に自動生成されたインターフェイスを使用する場合は、メソッドを装飾し[WebGet]て使用します

var cf = new WebChannelFactory<IBaseSvc2>(new Uri("..."));
var service = cf.CreateChannel();
var result = service.Version();

それはすべてうまくいきます。変更は自動的に取得されないため、これは完全な解決策ではありません。他の解決策がある可能性がありますか?

PSWebサービスのインターフェイスは次のようになります。

    [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();
    }
于 2012-10-03T10:10:42.097 に答える
0

構成ファイルにプロトコルを追加することで実現できます

<webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
</webServices>
于 2012-10-03T08:52:43.523 に答える