は、Webメソッドを呼び出します。
(T)type.InvokeMember(methodName, BindingFlags.InvokeMethod, null, obj, args);
args
パラメータは、Webメソッドに渡されるパラメータが含まれている必要がありobject[]
です。
UserMaster objUser = ...
UserEmail objEmail = ...
string ouValue = ...
、その後、メソッドに渡される引数の配列の構築:で
:
object[] args = new object[] { objUser, objEmail, ouValue };
UPDATEをあなたの特定のケースでは、3つの要素が含まれているためにそれを必要としますWebサービスで定義されているUserMaster
およびUserEmail
のクラスを参照するには、インポート時にクライアントプロキシによって生成されたすべてのタイプを公開する必要があるかもしれませんWebサービスを使用し、リフレクションを使用します。元の例では非公開であるクラスにはDictionary<string, Type> availableTypes;
というプロパティがあります。あなたは公開することができますし、あなたはそれらのタイプにアクセスできるようになります。だから、
:
WebServiceInvoker呼び出しは=新しいWebServiceInvoker(新しいウリ( "のhttp://localhost/services/test.php"));
string service = "MyService";
string method = "SaveBusinessUserInfo";
Type userMasterType = invoker.AvailableTypes["FullNamespace.UserMaster"];
Type userEmailType = invoker.AvailableTypes["FullNamespace.UserEmail"];
object userMaster = Activator.CreateInstance(userMasterType);
object userEmail = Activator.CreateInstance(userEmailType);
// now that you have obtained the 2 instances you could set properties on them:
userMasterType.GetProperty("Username").SetValue(userMaster, "some username", null);
...
object[] args = new object[] { userMaster, userEmail, "foo bar" };
long result = invoker.InvokeMethod<long>(service, method, args);
これはすぐに悪夢になる可能性があります。 .NET 4.0を使用している場合は、このコードを簡略化するためにdynamicキーワードを使用できます。
UserMaster、UserEmailクラスもwebservceにあります。実行時にこれらのオブジェクトをバインドすることはできますか? – Pankaj
@Pankaj、私は答えを例で更新しました。 –