ASMXによって生成されたテストフォームは、操作のテストに非常に便利です。ただし、SOAPヘッダーを含める明確な方法はありません。
サービスを使用するようにクライアントをプログラミングせずに、ヘッダーをテストするにはどうすればよいですか?
ASMXによって生成されたテストフォームは、操作のテストに非常に便利です。ただし、SOAPヘッダーを含める明確な方法はありません。
サービスを使用するようにクライアントをプログラミングせずに、ヘッダーをテストするにはどうすればよいですか?
相互運用性を重視する場合は、.net クライアント アプリを使用して .net Web サービスをテストしないでください。SOAPUI などの適切なツールを使用して、Web サービスをテストします。www.soapui.org
このツールは Java で書かれていますが、無料であらゆる種類の Web サービスをテストするのに非常に便利です。
あなたは尋ねました
サービスを使用するようにクライアントをプログラミングせずに、ヘッダーをテストするにはどうすればよいですか?
答えは、サービスを使用するようにクライアントをプログラムする必要があるということです。
あなたのサービスを利用するためのコードを書く開発者は、あなたのひどく設計された、使いにくいサービスをその奇妙なヘッダーで使用するクライアントを書くことを余儀なくされるでしょう。彼らが知る前に、{不適切に設計された、使いにくい、奇妙な}ことを知っておくほうがよいでしょう。
そうすることで、サービスを{適切に設計され、使いやすく、通常の状態}になるように再設計できます。
ところで、Webサービスの単体テストを作成することはこれを行うための良い方法です。そうすれば、小さくてシンプルなクライアントを手に入れることができます。
何をしようとしているのか理解できれば、asmx が提供する SOAP を使用して HTTP リクエストを実行できます。ブラウザで asmx を開くと、Web サービスで使用できるメソッドのリストが表示されます。テストするメソッドをクリックすると、使用できる SOAP リクエストが表示されます。テストする値を入力するだけです。以下は、SOAP のテストに使用できるコードです。
// Set SOAP Message
string msg = "<?xml version='1.0' encoding='UTF-8'?><soap:Envelope>";
...
...
// Make http request
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://linktoyour/service.asmx");
req.Headers.Add("SOAPAction", "http://linktoyour/NameOfFuntion");
req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg);
req.ContentLength = bytes.Length;
System.IO.Stream st = req.GetRequestStream();
st.Write(bytes,0,bytes.Length);
st.Close();
// Read response
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
System.IO.Stream st1 = res.GetResponseStream();
System.IO.StreamReader sr = new System.IO.StreamReader(st1, System.Text.Encoding.UTF8);
string txt = sr.ReadToEnd();
// Display response
Response.Write(txt);
ヘッダーに直接アクセスする代わりに、コードが代わりにアクセスする抽象化を提供します。たとえば、「Customer」というヘッダーがある場合、次のようにアクセスできるコンテキスト クラスを提供できます。
文字列顧客 = MyContext.Current.Customer;
あとは、すべての配管を必要としないテスト クラスのモック実装を交換するだけです。
ただし、Web サーバーの外部で ASMX をテストすることは、シリアル化などを見逃す可能性があるため、必ずしも理想的ではないことに注意してください。テスト サーバーにデプロイして、デプロイされたコピーをテストできれば、より良い結果が得られます。本当にテストに関心がある場合は、テストで簡単に WCF を自己ホストできるため、WCF の方が適しています。