を提供するREST APIの呼び出しを行います新しいWeb APIエンドポイント。は、私は、Webメソッドを傍受するために、この要件はで処理する必要のあるビジネスケースを識別するための要求を読んで、既存のレガシーの.asmx Webサービスで呼び出す必要がありHttpModuleをを使用してSOAP Webサービスの呼び出しをインターセプトし、応答
ASMXサービスと対話するクライアントは、おそらくサービス参照を追加しており、直接の呼び出しを行うための新しいのREST APIを認識してWebメソッドの呼び出しではなくを行い、いくつかのレガシーシステムです。したがって、変更を認識しておらず、いつものようにSOAP応答を消費する必要があります。
これまでのところ私は、カスタムHttpModuleをクラスを追加要求をインターセプトし、入力ストリームを読み、それからの応答を取得するためのAPI呼び出しを行うことができました。しかし、どのようにSOAP応答をクライアントに送り返し、ターゲットのWebメソッドに移動しないように要求を終了するのですか?ここで
は私のカスタムHttpModuleをクラスである: "認識できないメッセージバージョン" 私はエラーを取得するpublic class CustomHttpModule : IHttpModule
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication application)
{
application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
}
private void Application_BeginRequest(Object source, EventArgs e)
{
// Create HttpApplication and HttpContext objects to access
// request and response properties.
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
// Initialize soap request XML
XmlDocument xmlSoapRequest = new XmlDocument();
// Move to begining of input stream and read
context.Request.InputStream.Position = 0;
StreamReader readStream = new StreamReader(context.Request.InputStream, Encoding.UTF8);
// Load into XML document
if (readStream.BaseStream != null && readStream.BaseStream.Length > 0)
{
//string streamString = readStream.ReadToEnd();
xmlSoapRequest.Load(readStream);
}
context.Request.InputStream.Position = 0;
// Check if the request is for the web method to be intercepted
if (xmlSoapRequest.GetElementsByTagName("SomeWebMethodName").Count > 0)
{
string response = "";
using (WebClient wc = new WebClient())
{
string URI = "http://localhost:19875/api/home";
wc.Headers[HttpRequestHeader.Accept] = "application/xml";
wc.Headers[HttpRequestHeader.ContentType] = "application/xml";
response = wc.UploadString(URI, xmlSoapRequest.InnerText);
}
context.Response.ContentType = "text/xml";
context.Response.Write(response);
context.Response.End();
}
}
}
今クライアントに。 は、私がどのように私はそれを作成することができ、応答がSOAP応答する必要があります推測していますか?また、全体の質問にはより良いアプローチがありますか? ありがとうございます。