既存のASMX Webサービス(.NET 2.0)があり、WCFと.NET 4.0を使用して新しいサービスを作成しています。WCFサービスを介してSoapHeaderをASMXサービスに転送
が[WebService(Namespace = "http://tempuri.org/")]
public class ExistingWebService : WebService
{
public CustomContextHeader CustomContextHeader{ get; set; }
[WebMethod, SoapHeader("CustomContextHeader")]
[SecurityContextExtension]
public string GetExisting(int customerId)
{
// do stuff
return a string value;
}
}
新しいサービスは、私が追加した既存のASMXサービスでこのメソッドを呼び出す必要があります:SecurityContextExtension
が認証を処理ASMXサービスがSoapHeader
経由でカスタム認証を実装し、次のようになりました
、私のプロジェクトへのサービスリファレンスとして。
[ServiceContract]
public interface INewService
{
[OperationContract]
string GetNew(int myId);
}
public class NewService : INewService
{
public string GetNew(int myId)
{
// do stuff
using (var client = new ExistingWebServiceSoapClient())
{
var new = client.GetExisting(CustomContextHeader, myId);
}
// do more stuff
}
}
クライアント:
CustomContextHeader
はメソッド(!私はWCFサービス参照のマジックを通じて推測する)ので、私のWCFサービスからASMXに私の呼び出しは次のようになります上のパラメータとして公開されます新しいWCFサービスにアクセスしている既存のASMXにもアクセスするため、正しいCustomContextHeaderを生成してGetExisting
メソッドに渡すことができます。
クライアントがASMXと同じCustomContextHeaderを生成する場合、パラメータを使用してASMXに渡すためにWCFサービスを受け入れて抽出するにはどうすればよいですか?
私はGoogleで検索してMessage ContractsとWCFExtrasに多くの情報を発見したが、かなり私が必要なものを達成するための方法のいずれかを実装する方法を見つけ出すことはできませんしています。私は、WCFExtrasのような別の依存関係を追加したくないので、すぐに使える.NET 4.0の機能を使うことができるあらゆるソリューションが大いに評価されます!
@Shevak私は関連する問題に直面しています。あなたはそれを手伝ってくれるかもしれません。この追加のargumnetがヘッダーとして表示されるので、wcfクライアントから "CustomContextHeader"として渡すものを教えてください。 "CustomContextHeader"という名前のオブジェクト名を作成し、tokenIDまたは関連するプロパティをその内部に保持し、そのオブジェクトをargumnetとして渡す必要がありますか?私を提案してください。私は明確ではありませんASMX呼び出しでHEADER ARGUMENTとして渡すべきもの、そのようなargumnetはありませんでした。TOKENIDフィールドを設定し、メソッドはただ1つのargumnet "ID"を持っています。 – dsi