1

過去に、WCFサービスまたはASMXサービスを呼び出した経験があり、.svcまたは.asmx URLにサービス参照を追加するだけで、プロキシが生成され、メソッドを呼び出すためのインテリセンスが得られます。

.net以外のWebサービスでも同じですか?

これをhttp://www.earthtools.org/webservices.htmと呼ぶ必要があり ます

winrtアプリのc#コードからですが、方法がわかりません

4

3 に答える 3

7

WSDL がある場合は、そのサービスへの参照を追加できます。しかし、ここでは REST サービスを呼び出そうとします。

投稿リクエストを送信し、レスポンスを次のように rad する必要があります。

private const string BASE_URL = "http://www.earthtools.org/timezone";
private const string REQUEST_URL_FORMAT = "{0}/{1}/{2}";

public timezone GetTimeZone(double latitude, double longitude)
{
    var uriString = String.Format(REQUEST_URL_FORMAT, BASE_URL, latitude, longitude);
    var requestUri = new Uri(uriString);

    var request = WebRequest.Create(requestUri);
    using (var response = request.GetResponse())
    {
        using (var responseStream = response.GetResponseStream())
        {
            var ser = new XmlSerializer(typeof (timezone));
            var result = (timezone) ser.Deserialize(responseStream);
            return result;
        }
    }
}

例はこちらから。

于 2012-06-11T08:11:15.903 に答える
2

それらが SOAP Web サービスであった場合でも、Visual Studio を .WSDL エンドポイントに向けて、クライアント プロキシを生成させることができます。しかし、これらは REST サービスのようです。XDocument.Loadなどを使用し、Linq-to-XML または XML 逆シリアル化を使用して XML を C# クラスに変換するのが最善の策だと思います。

たとえば、このサービスを呼び出したいとしましょう。緯度/経度の結果を取得する簡単な方法は、次のようになります。

XDocument xdoc = XDocument.Load("http://www.earthtools.org/height/52.4822/-1.8946");
var lat = (decimal)xdoc.Element("location").Element("latitude");
var lng = (decimal)xdoc.Element("location").Element("longitude");
于 2012-06-11T08:08:59.240 に答える
1

Microsoft のマーケティング担当者は、異種システムであっても、Web サービスは相互運用可能であると言うでしょう。

それは半分真実です。Web サービス標準は実際にはマルチプラットフォームです。ただし、フィールドでは、もう少し複雑になる可能性があります。異なるシステムの異なる哲学は、異なる動作につながる可能性があります。

少し前に、Visual Studio 2010 を使用して、Java Web ロジックで構築された Web サービスのクエリを追加しました (システムがわからないため、クライアント側にいました)。

  1. Visual Studio プロキシ ウィザードは、インライン スキーマのみを認識します。ここで、スキーマは wsdl 内で を使用して参照されました<xsd:import>。Visual Studioはそれを理解していません
  2. 次に、svcutil に移動して、コマンド ラインからプロキシを生成しました。これは、WSDL ファイル (このファイルはサービス プロバイダーによって手動で作成されたもの) にいくつかのエラーがあるため、直接は機能していませんでした。wsdlファイルを消去するようにサービスプロバイダーに依頼する必要があります
  3. DTO を表す xsd ファイルは、複数の Web サービスによって共有されていました。これにより、すべてのサービスで使用されていなくても、各プロキシで同じクラスが複製されます。部分クラスを微調整して、一意のクラスに「再ラップ」する必要がありました。

結論として、「相互運用性」という用語の限界を知ることができます。標準では相互運用可能であるとされていますが、現場では必ずしもそうではありません。

「休息」サービスの新しい世界を歓迎します。これにより、相互運用性が大幅に簡素化されます。欠点は、配管の一部を自分で作成する必要がある場合があることです。

良いニュースです。あなたが言及したサービスは、この休息の哲学を取り入れているようです。簡単ではありませんが、単純な HTTP リクエスト (post、get、または put) を作成して、このサービスをクエリすることができます。

于 2012-06-11T08:14:19.350 に答える