ASMXでのカスタムSOAPヘッダーのテスト
-
03-07-2019 - |
質問
ASMXによって生成されたテストフォームは、操作のテストに非常に便利です。ただし、SOAPヘッダーを含める明確な方法はありません。
サービスを使用するようにクライアントをプログラミングせずにヘッダーをテストするにはどうすればよいですか
解決
相互運用に関心がある場合は、.netクライアントアプリを使用して.net Webサービスをテストしないでください。 SOAPUIなどの適切なツールを使用して、Webサービスをテストします。 www.soapui.org
このツールはJavaで記述されていますが、無料であり、あらゆる種類の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);
尋ねました
サービスを使用するようにクライアントをプログラミングせずにヘッダーをテストするにはどうすればよいですか
答えは、サービスを使用するようにクライアントをプログラムする必要があるということです。
サービスを使用するコードを作成する開発者は、奇妙なヘッダーを使用して、不適切に設計された使いにくいサービスを使用するクライアントを作成せざるを得ません。 {設計が不適切で使いにくい、奇妙な}ことを知る前に、それを確認することをお勧めします。
そのようにして、サービスを{well-designed、pleasure-to-use、normal}に再設計できます。
ところで、Webサービスの単体テストを書くことはこれを行う良い方法です。そうすれば、小さくてシンプルなクライアントができます。
ヘッダーに直接アクセスする代わりに、コードが代わりにアクセスする抽象化を提供します。たとえば、&quot; Customer&quot;というヘッダーがある場合、次のようにアクセスできるコンテキストクラスを提供できます。
string customer = MyContext.Current.Customer;
今、あなたがしなければならないのは、すべての配管を必要としないテストクラスのモック実装にスワップすることです。
ただし、Webサーバーの外部でASMXをテストすることは、シリアル化などを見逃す可能性があるため、必ずしも理想的ではないことに注意してください。テストサーバーに展開して、展開されたコピーをテストできる場合は、その方が良いでしょう。テストに本当に関心がある場合は、テストでWCFを簡単にホストできるので、WCFの方が優れたオプションです。