webservice自定义结构作参数的问题(网上查找无相关资料)
一个公共类作为结构体的类集合
public struct A1
{
public string a1;
public string a2;
}
生成dll后为A.dll
服务器端用webservice,代码如下
[WebMethod]
public bool B1(object sender)
{
try
{
A.A1 a = (A.A1)sender;
return true;
}
catch
{
return false;
}
}
客户端代码如下:
private void C1()
{
A.A1 a = new A.A1();
a.a1 = "a1";
a.a2 = "a2";
BService.B b = new BService.B();
try
{
if(b.B1(a))
{
MessageBox.Show("T");
}
else
{
MessageBox.Show("T");
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
显示的错误信息为:生成xml文档时错误
错误位置为:if(b.B1(a))
求各位大大给出解决方法。网上查找了N天了都没有相关介绍。
[解决办法]
看不出问题来
[解决办法]
public bool B1(A.A1 sender)
[解决办法]
WebMethod]
public bool B1(A.A1 sender)
{
否则客户端无法知道参数是什么类型的,无法进行正确的marshal
[解决办法]
up
[解决办法]
up
[解决办法]
先把结构体序列化了,wsc收到序列化串再反序列化成对象,不就行了,这种方法我用过。
另外,WebService也可以动态调用
http://blog.zhaoyu.me/archives/142.shtml
[解决办法]
直接用结构体就行啦,只要不是返回的参数就不需要序列化
[解决办法]
up
[解决办法]
[Serializable]public class A{ struct A1{ }}
[解决办法]
直接web引用就可以得到自定义结构了,为什么还要在客户端引用
[解决办法]
[WebMethod]
[XmlInclude(typeof(A.A1))]
public bool B1(object sender)
{
try
{
A.A1 a = (A.A1)sender;
return true;
}
catch
{
return false;
}
}