背景:
私は、SOAPおよびその他のプロトコルを介して多くのタイプの単純なサービスを提供するWebサービスサイトを作成しています。目標は、たとえば変換、RSS解析、スパムチェック、およびその他の多くの種類の作業を簡単に行えるようにすることです。このサイトは主に初心者の開発者を対象としています。
私の問題:
そのためにC#や.NETを開発したことはありません。何年も前にVB6をハックしましたが、それだけです。ここでいくつか必要になりますC#でSOAPを介してRPC呼び出しを行う例。これを見つけるためにWebとStack Overflowを検索しようとしましたが、多くのリソースが見つかりませんでした。また、リソースをランク付けする方法がわかりません(古いもの、間違ったものなど)。
PHPで次のように呼び出される簡単なサンプルサービスを作成しました。
<?php
$client = new SoapClient('http://webservi.se/year'); //URL to the WSDL
echo $client->getCurrentYear(); //This method returns an integer, called "year"
?>
このメソッドをC#でできるだけ簡単に呼び出したいと思います。すべての参照と例は大歓迎です。どこから始めますか?どのクラス/モジュール/何を利用できますか?
より良い通信フレームワークがあれば、ソリューションはSOAPをまったく含む必要はありません(バックエンドは拡張可能です)が、サーバー側はPHPで実装されていることに注意してくださいUnixだから、Microsoftのプロプライエタリなソリューションはサーバー側では問題外です。
J. Random Web Developerが従うことのできるドキュメントを作成できるように(共有Webホスティングを使用している場合でも)これが必要なことに注意してください。したがって、最善のアプローチはコードでのみこれを行うことであると考えますが、これを行う他の方法ももちろん歓迎します。
私が理解しているように、C#クライアントアプリケーションからWebサービスを呼び出したいと思っています。あなたはすでにサービスと公開されたWSDLファイルを持っています(私が間違っているなら私を修正してください)。現在、最も簡単な方法は、C#アプリケーションでプロキシクラスを生成することです(このプロセスは、サービス参照の追加と呼ばれます)。これには主に2つの方法があります。NETは、ASP.NETサービスを提供します。これは、SOAを行う古い方法です。Johnが提案したように、WCF.
さて、十分な理論とステップバイステップでやってみましょう
以下のスクリーンショットに示すダイアログが表示されます。 wsdlファイルのURLを入力して、[OK]をクリックします。 [OK]をクリックした後にエラーメッセージが表示される場合は、URLから?wsdl部分を削除してみてください。
ソリューションエクスプローラーでサービス参照を展開し、ServiceReference1をダブルクリックします(名前は異なる場合があります)。生成されたプロキシクラス名と名前空間が表示されます。私の場合、名前空間はWindowsFormsApplication1.ServiceReference1、プロキシクラスの名前はService1Clientです。上で言ったように、クラス名はあなたのケースでは異なるかもしれません。
C#ソースコードに移動します。 using WindowsFormsApplication1.ServiceReference1
を追加します。
Service1Client service = new Service1Client();
int year = service.getCurrentYear();
問題が発生した場合、これがお役に立てば幸いです。
私はあなたが話していることのかなりの部分を実行しました。プラットフォーム間のSOAP相互運用性には、1つの基本的なルールがあります:CONTRACT FIRST。 notからWSDLをコードから派生させてから、別のプラットフォームでクライアントを生成しようとします。 「Hello World」タイプの関数以外のものは、コードの生成、実行時の会話、または(私のお気に入り)エラーを発生させずにすべてのデータを適切に送受信できません。
とはいえ、WSDLは複雑で厄介なものであり、可能な限りゼロから記述することは避けます。サービスの信頼できる相互運用のためのガイドラインを次に示します(Web参照、WCF、Axis2/Java、WS02、Ruby、Pythonなどを使用):
</rant>
:)
ブラウザで実行できる場合は、これと同じくらい簡単なものが動作します
var webRequest = WebRequest.Create(@"http://webservi.se/year/getCurrentYear");
using (var response = webRequest.GetResponse())
{
using (var rd = new StreamReader(response.GetResponseStream()))
{
var soapResult = rd.ReadToEnd();
}
}
「 PHPでWCFサービスを使用 」をご覧ください。必要なものの基本を説明します。
理論の要約として:
WCFまたはWindows Communication Foundationは、方法から抽象化されたサービス(基礎となる通信方法)を定義して、それらを呼び出すことができるテクノロジです。
その考え方は、サービスが行うこととサービスが提供するものについての契約を定義し、さらに、TCP、HTTP、SOAPなど、サービスを実際に消費するために使用される通信方法に関する別の契約を定義することです。
記事の最初の部分 here があり、非常に基本的なWCFサービスの作成方法を説明しています。
その他のリソース:
AsloはNuSOAPをご覧ください。 NuSphere の場合、これはPHPからWCFサービスに接続できるツールキットです。
Here .NETクライアントアプリケーションからNuSOAPベースのWebサービスを呼び出すための素敵なチュートリアルを見つけることができます。ただし、IMOでは、サービスについて PHPのWSO2 Webサービスフレームワーク(WSO2 WSF/PHP) も考慮する必要があります。 PHP 2.0のWSO2 Webサービスフレームワークは、PHPおよびSOAPサービスの両方を作成するための、業界唯一のRESTライブラリを大幅に強化します を参照してください。それについて webminar もあります。
現在、.NETの世界では、相互運用性の問題を考慮して、WCFの使用も推奨しています。相互運用性の例は here にありますが、この例では、反対の代わりにPHP-client + WCF-serviceを使用しています。 PHPサービスとWFCクライアントを自由に実装してください。
Codeplex.comには、生産性が非常に高いと思われるWCFの関連するオープンソースプロジェクトがいくつかあります。これらのプロジェクトは、Win FormsおよびWindows Presentation Foundationアプリケーションの設計と実装に非常に役立ちます。 Smart Client 、 Web Client 、および Mobile Client 。 WCFと組み合わせて使用して、あらゆる種類のWebサービスを適切に呼び出すことができます。
一般的に言えば、 パターンとプラクティスチーム は、.NETプラットフォーム、特にWebを扱うさまざまなオープンソースプロジェクトの優れたプラクティスと設計をまとめたものです。ですから、.NETクライアントに関連する設計上の決定の良い出発点だと思います。