在你連接到下面一行文章調用Web方法:
(T)type.InvokeMember(methodName, BindingFlags.InvokeMethod, null, obj, args);
的args
參數是一個object[]
必須包含的參數傳遞到你的Web方法。在您的特定情況下你需要它包含三個元素:
UserMaster objUser = ...
UserEmail objEmail = ...
string ouValue = ...
,然後生成參數數組將被傳遞給方法:
object[] args = new object[] { objUser, objEmail, ouValue };
UPDATE:
在爲了引用在您的Web服務中定義的UserMaster
和UserEmail
類,您可能需要公開在導入時由客戶端代理生成的所有類型使用Web服務,然後使用反射。 WebServiceInvoker
類中的Dictionary<string, Type> availableTypes;
屬性在原始示例中是私有的。您可以將其公開,然後您將可以訪問這些類型。
所以:
WebServiceInvoker調用=新WebServiceInvoker(新URI( 「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.how我可以綁定這些對象在運行時.. – Pankaj 2012-02-10 07:31:32
@Pankaj,我已經更新了我的答案與一個例子。 – 2012-02-10 07:43:32