1

ASP.NETアプリケーションが任意の数の異なるホストと通信できるようにしたいのですが、すべてがまったく同じインターフェイスを持つが、異なるドメイン/ASMXURL上にあるWebサービスを提供します。1つのWebサービスのクラスを生成できるソリューションをここで見つけましたが、URLアドレス/プレフィックス/名前空間がメソッド属性にハードコードされており、それらを変更する方法がわかりません(関連する質問はこちら)。他に解決策はありますか?

4

1 に答える 1

1

考えられる解決策の1つは、DynWsibを使用することです-ここにあります。これはWCFでは機能しないことに注意してください。

その後、実行時に呼び出すことができます。バイナリは、URLごとに作成およびキャッシュされます。以下の機能は基本的な考え方です。必要に応じて変更してください。

public object InvokeWebserviceCall(string wsdUrl, string actionUrl, string functionName,
        string domain, string username, string password, params object[] parameters)
    {
        ///todo: validate input

        var proxy = new DynamicWebServiceProxy();

        //credentials if needed
        if (!string.IsNullOrEmpty(domain))
        {
            proxy.Credentials = new NetworkCredential(username, password, domain);
        }
        else if (!string.IsNullOrEmpty(username))
        {
            proxy.Credentials = new NetworkCredential(username, password);
        }

        proxy.EnableMessageAccess = true;
        proxy.Wsdl = wsdUrl;

        //get type name
        var type = proxy.ProxyAssembly.GetTypes().SingleOrDefault(t => t.BaseType == typeof(SoapHttpClientProtocolExtended));

        if (type != null)
        {
            proxy.TypeName = type.Name;
        }

        proxy.MethodName = functionName;
        proxy.Url = new Uri(actionUrl);

        if (parameters != null)
        {
            parameters.ToList().ForEach(proxy.AddParameter);
        }

        object result = proxy.InvokeCall();

        return result;
    }
于 2013-01-26T04:42:52.487 に答える